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 | |
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>
-rw-r--r-- | tools/perf/util/util.c | 24 | ||||
-rw-r--r-- | tools/perf/util/util.h | 1 |
2 files changed, 20 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; |
diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h index 9f6b928f6b2b..ce0f73d4d91f 100644 --- a/tools/perf/util/util.h +++ b/tools/perf/util/util.h | |||
@@ -254,6 +254,7 @@ int strtailcmp(const char *s1, const char *s2); | |||
254 | char *strxfrchar(char *s, char from, char to); | 254 | char *strxfrchar(char *s, char from, char to); |
255 | unsigned long convert_unit(unsigned long value, char *unit); | 255 | unsigned long convert_unit(unsigned long value, char *unit); |
256 | ssize_t readn(int fd, void *buf, size_t n); | 256 | ssize_t readn(int fd, void *buf, size_t n); |
257 | ssize_t writen(int fd, void *buf, size_t n); | ||
257 | 258 | ||
258 | struct perf_event_attr; | 259 | struct perf_event_attr; |
259 | 260 | ||