diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-09-10 10:58:50 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-09-14 11:50:25 -0400 |
commit | 2d729f6a8ac3edbf68de7239fab96c9736946af5 (patch) | |
tree | ec0a1ee34c30e969b6affb211850c7e1bcf320d0 /tools/lib/api/fs/fs.c | |
parent | e0838e029f4f6f271d6172b18f5473558ebdea1b (diff) |
tools lib api fs: Introduce sysfs__read_{int,ull}()
To read either an int or an unsigned long long value from the given
file.
E.g.:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
3200000
$ ./sysfs__read_ull
devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq=3200000
$
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-4a12m4d5k8m4qgc1vguocvei@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/lib/api/fs/fs.c')
-rw-r--r-- | tools/lib/api/fs/fs.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/tools/lib/api/fs/fs.c b/tools/lib/api/fs/fs.c index 791509346178..732dbef588b0 100644 --- a/tools/lib/api/fs/fs.c +++ b/tools/lib/api/fs/fs.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include <ctype.h> | 1 | #include <ctype.h> |
2 | #include <errno.h> | 2 | #include <errno.h> |
3 | #include <limits.h> | ||
3 | #include <stdbool.h> | 4 | #include <stdbool.h> |
4 | #include <stdio.h> | 5 | #include <stdio.h> |
5 | #include <stdlib.h> | 6 | #include <stdlib.h> |
@@ -281,6 +282,50 @@ int filename__read_int(const char *filename, int *value) | |||
281 | return err; | 282 | return err; |
282 | } | 283 | } |
283 | 284 | ||
285 | int filename__read_ull(const char *filename, unsigned long long *value) | ||
286 | { | ||
287 | char line[64]; | ||
288 | int fd = open(filename, O_RDONLY), err = -1; | ||
289 | |||
290 | if (fd < 0) | ||
291 | return -1; | ||
292 | |||
293 | if (read(fd, line, sizeof(line)) > 0) { | ||
294 | *value = strtoull(line, NULL, 10); | ||
295 | if (*value != ULLONG_MAX) | ||
296 | err = 0; | ||
297 | } | ||
298 | |||
299 | close(fd); | ||
300 | return err; | ||
301 | } | ||
302 | |||
303 | int sysfs__read_ull(const char *entry, unsigned long long *value) | ||
304 | { | ||
305 | char path[PATH_MAX]; | ||
306 | const char *sysfs = sysfs__mountpoint(); | ||
307 | |||
308 | if (!sysfs) | ||
309 | return -1; | ||
310 | |||
311 | snprintf(path, sizeof(path), "%s/%s", sysfs, entry); | ||
312 | |||
313 | return filename__read_ull(path, value); | ||
314 | } | ||
315 | |||
316 | int sysfs__read_int(const char *entry, int *value) | ||
317 | { | ||
318 | char path[PATH_MAX]; | ||
319 | const char *sysfs = sysfs__mountpoint(); | ||
320 | |||
321 | if (!sysfs) | ||
322 | return -1; | ||
323 | |||
324 | snprintf(path, sizeof(path), "%s/%s", sysfs, entry); | ||
325 | |||
326 | return filename__read_int(path, value); | ||
327 | } | ||
328 | |||
284 | int sysctl__read_int(const char *sysctl, int *value) | 329 | int sysctl__read_int(const char *sysctl, int *value) |
285 | { | 330 | { |
286 | char path[PATH_MAX]; | 331 | char path[PATH_MAX]; |