aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/api/fs/fs.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2015-09-10 10:58:50 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-09-14 11:50:25 -0400
commit2d729f6a8ac3edbf68de7239fab96c9736946af5 (patch)
treeec0a1ee34c30e969b6affb211850c7e1bcf320d0 /tools/lib/api/fs/fs.c
parente0838e029f4f6f271d6172b18f5473558ebdea1b (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.c45
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
285int 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
303int 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
316int 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
284int sysctl__read_int(const char *sysctl, int *value) 329int sysctl__read_int(const char *sysctl, int *value)
285{ 330{
286 char path[PATH_MAX]; 331 char path[PATH_MAX];