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 | |
| 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')
| -rw-r--r-- | tools/lib/api/fs/fs.c | 45 | ||||
| -rw-r--r-- | tools/lib/api/fs/fs.h | 4 |
2 files changed, 49 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]; |
diff --git a/tools/lib/api/fs/fs.h b/tools/lib/api/fs/fs.h index f654bcb99d1e..d024a7f682f6 100644 --- a/tools/lib/api/fs/fs.h +++ b/tools/lib/api/fs/fs.h | |||
| @@ -25,5 +25,9 @@ FS(tracefs) | |||
| 25 | 25 | ||
| 26 | 26 | ||
| 27 | int filename__read_int(const char *filename, int *value); | 27 | int filename__read_int(const char *filename, int *value); |
| 28 | int filename__read_ull(const char *filename, unsigned long long *value); | ||
| 29 | |||
| 28 | int sysctl__read_int(const char *sysctl, int *value); | 30 | int sysctl__read_int(const char *sysctl, int *value); |
| 31 | int sysfs__read_int(const char *entry, int *value); | ||
| 32 | int sysfs__read_ull(const char *entry, unsigned long long *value); | ||
| 29 | #endif /* __API_FS__ */ | 33 | #endif /* __API_FS__ */ |
