diff options
author | Kan Liang <Kan.liang@intel.com> | 2017-05-26 15:05:37 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-06-21 10:35:27 -0400 |
commit | 3b00ea938653d136c8e4bcbe9722d954e128ce2e (patch) | |
tree | 6af90bcd4ad08b97c26579890f57b11ac332a3e2 /tools/lib | |
parent | fd25bf8b8c577aef8c0156eddaf63f3e862c659c (diff) |
tools lib api fs: Add sysfs__write_int function
Add sysfs__write_int() to ease up writing int to sysfs. New interface
is:
int sysfs__write_int(const char *entry, int value);
Also, introducing filename__write_int() which is useful for new helpers
to write sysctl values.
Signed-off-by: Kan Liang <Kan.liang@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Elliott <elliott@hpe.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1495825538-5230-2-git-send-email-kan.liang@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/lib')
-rw-r--r-- | tools/lib/api/fs/fs.c | 30 | ||||
-rw-r--r-- | tools/lib/api/fs/fs.h | 4 |
2 files changed, 34 insertions, 0 deletions
diff --git a/tools/lib/api/fs/fs.c b/tools/lib/api/fs/fs.c index 809c7721cd24..a7ecf8f469f4 100644 --- a/tools/lib/api/fs/fs.c +++ b/tools/lib/api/fs/fs.c | |||
@@ -387,6 +387,22 @@ int filename__read_str(const char *filename, char **buf, size_t *sizep) | |||
387 | return err; | 387 | return err; |
388 | } | 388 | } |
389 | 389 | ||
390 | int filename__write_int(const char *filename, int value) | ||
391 | { | ||
392 | int fd = open(filename, O_WRONLY), err = -1; | ||
393 | char buf[64]; | ||
394 | |||
395 | if (fd < 0) | ||
396 | return err; | ||
397 | |||
398 | sprintf(buf, "%d", value); | ||
399 | if (write(fd, buf, sizeof(buf)) == sizeof(buf)) | ||
400 | err = 0; | ||
401 | |||
402 | close(fd); | ||
403 | return err; | ||
404 | } | ||
405 | |||
390 | int procfs__read_str(const char *entry, char **buf, size_t *sizep) | 406 | int procfs__read_str(const char *entry, char **buf, size_t *sizep) |
391 | { | 407 | { |
392 | char path[PATH_MAX]; | 408 | char path[PATH_MAX]; |
@@ -480,3 +496,17 @@ int sysctl__read_int(const char *sysctl, int *value) | |||
480 | 496 | ||
481 | return filename__read_int(path, value); | 497 | return filename__read_int(path, value); |
482 | } | 498 | } |
499 | |||
500 | int sysfs__write_int(const char *entry, int value) | ||
501 | { | ||
502 | char path[PATH_MAX]; | ||
503 | const char *sysfs = sysfs__mountpoint(); | ||
504 | |||
505 | if (!sysfs) | ||
506 | return -1; | ||
507 | |||
508 | if (snprintf(path, sizeof(path), "%s/%s", sysfs, entry) >= PATH_MAX) | ||
509 | return -1; | ||
510 | |||
511 | return filename__write_int(path, value); | ||
512 | } | ||
diff --git a/tools/lib/api/fs/fs.h b/tools/lib/api/fs/fs.h index 956c21127d1e..45605348461e 100644 --- a/tools/lib/api/fs/fs.h +++ b/tools/lib/api/fs/fs.h | |||
@@ -31,6 +31,8 @@ int filename__read_int(const char *filename, int *value); | |||
31 | int filename__read_ull(const char *filename, unsigned long long *value); | 31 | int filename__read_ull(const char *filename, unsigned long long *value); |
32 | int filename__read_str(const char *filename, char **buf, size_t *sizep); | 32 | int filename__read_str(const char *filename, char **buf, size_t *sizep); |
33 | 33 | ||
34 | int filename__write_int(const char *filename, int value); | ||
35 | |||
34 | int procfs__read_str(const char *entry, char **buf, size_t *sizep); | 36 | int procfs__read_str(const char *entry, char **buf, size_t *sizep); |
35 | 37 | ||
36 | int sysctl__read_int(const char *sysctl, int *value); | 38 | int sysctl__read_int(const char *sysctl, int *value); |
@@ -38,4 +40,6 @@ int sysfs__read_int(const char *entry, int *value); | |||
38 | int sysfs__read_ull(const char *entry, unsigned long long *value); | 40 | int sysfs__read_ull(const char *entry, unsigned long long *value); |
39 | int sysfs__read_str(const char *entry, char **buf, size_t *sizep); | 41 | int sysfs__read_str(const char *entry, char **buf, size_t *sizep); |
40 | int sysfs__read_bool(const char *entry, bool *value); | 42 | int sysfs__read_bool(const char *entry, bool *value); |
43 | |||
44 | int sysfs__write_int(const char *entry, int value); | ||
41 | #endif /* __API_FS__ */ | 45 | #endif /* __API_FS__ */ |