diff options
author | Jiri Olsa <jolsa@redhat.com> | 2013-11-28 05:30:16 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-12-02 07:22:46 -0500 |
commit | bc3a502bc2bc78d03526d6abcc5697aab18d5ae9 (patch) | |
tree | 9811125522636d12b6c2bb67d8ef4e8c69f6511c /tools/perf/util/util.c | |
parent | 838d14520267769648fb2fc2a637107a1d102590 (diff) |
perf tools: Add writen function
Adding 'writen' function as a synchronous wrapper for write syscall with
following prototype:
ssize_t writen(int fd, void *buf, size_t n)
Returns the number of bytes written on success or -1 in case of err.
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Requested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1385634619-8129-5-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/util.c')
-rw-r--r-- | tools/perf/util/util.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 6ea0b4ae9569..b1d5376b9dd9 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c | |||
@@ -152,16 +152,14 @@ unsigned long convert_unit(unsigned long value, char *unit) | |||
152 | return value; | 152 | return value; |
153 | } | 153 | } |
154 | 154 | ||
155 | /* | 155 | static ssize_t ion(bool is_read, int fd, void *buf, size_t n) |
156 | * Read exactly 'n' bytes or return an error. | ||
157 | */ | ||
158 | ssize_t readn(int fd, void *buf, size_t n) | ||
159 | { | 156 | { |
160 | void *buf_start = buf; | 157 | void *buf_start = buf; |
161 | size_t left = n; | 158 | size_t left = n; |
162 | 159 | ||
163 | while (left) { | 160 | while (left) { |
164 | ssize_t ret = read(fd, buf, left); | 161 | ssize_t ret = is_read ? read(fd, buf, left) : |
162 | write(fd, buf, left); | ||
165 | 163 | ||
166 | if (ret <= 0) | 164 | if (ret <= 0) |
167 | return ret; | 165 | return ret; |
@@ -174,6 +172,22 @@ ssize_t readn(int fd, void *buf, size_t n) | |||
174 | return n; | 172 | return n; |
175 | } | 173 | } |
176 | 174 | ||
175 | /* | ||
176 | * Read exactly 'n' bytes or return an error. | ||
177 | */ | ||
178 | ssize_t readn(int fd, void *buf, size_t n) | ||
179 | { | ||
180 | return ion(true, fd, buf, n); | ||
181 | } | ||
182 | |||
183 | /* | ||
184 | * Write exactly 'n' bytes or return an error. | ||
185 | */ | ||
186 | ssize_t writen(int fd, void *buf, size_t n) | ||
187 | { | ||
188 | return ion(false, fd, buf, n); | ||
189 | } | ||
190 | |||
177 | size_t hex_width(u64 v) | 191 | size_t hex_width(u64 v) |
178 | { | 192 | { |
179 | size_t n = 1; | 193 | size_t n = 1; |