Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Kan Liang and committed by
Arnaldo Carvalho de Melo
3b00ea93 fd25bf8b

+34
+30
tools/lib/api/fs/fs.c
··· 387 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 406 int procfs__read_str(const char *entry, char **buf, size_t *sizep) 391 407 { 392 408 char path[PATH_MAX]; ··· 495 479 snprintf(path, sizeof(path), "%s/sys/%s", procfs, sysctl); 496 480 497 481 return filename__read_int(path, value); 482 + } 483 + 484 + int sysfs__write_int(const char *entry, int value) 485 + { 486 + char path[PATH_MAX]; 487 + const char *sysfs = sysfs__mountpoint(); 488 + 489 + if (!sysfs) 490 + return -1; 491 + 492 + if (snprintf(path, sizeof(path), "%s/%s", sysfs, entry) >= PATH_MAX) 493 + return -1; 494 + 495 + return filename__write_int(path, value); 498 496 }
+4
tools/lib/api/fs/fs.h
··· 31 31 int filename__read_ull(const char *filename, unsigned long long *value); 32 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 36 int procfs__read_str(const char *entry, char **buf, size_t *sizep); 35 37 36 38 int sysctl__read_int(const char *sysctl, int *value); ··· 40 38 int sysfs__read_ull(const char *entry, unsigned long long *value); 41 39 int sysfs__read_str(const char *entry, char **buf, size_t *sizep); 42 40 int sysfs__read_bool(const char *entry, bool *value); 41 + 42 + int sysfs__write_int(const char *entry, int value); 43 43 #endif /* __API_FS__ */