diff options
-rw-r--r-- | src/util.c | 21 |
1 files changed, 10 insertions, 11 deletions
@@ -30,19 +30,18 @@ static int sysfs_read_buf(char *path, char *buf, int len) fd = open(path, O_RDONLY); if (fd == -1) - return -ENOENT; + return -errno; r = read(fd, buf, len); close(fd); - if ((r < 0) || (r > len)) + if ((r < 0) || (r >= len)) { + buf[0] = '\0'; return -EIO; + } - /* Replace '\n' with space (ascii code is 32) */ - buf[strcspn(buf, "\n")] = (char)32; buf[r] = '\0'; - - return 0; + return r; } int sysfs_write_buf(char *path, char *buf) @@ -54,7 +53,7 @@ int sysfs_write_buf(char *path, char *buf) fd = open(path, O_WRONLY); if (fd == -1) - return -ENOENT; + return -errno; w = write(fd, buf, strlen(buf)); close(fd); @@ -67,13 +66,13 @@ int sysfs_write_buf(char *path, char *buf) int sysfs_read_int(char *path, int *val) { - char buf[MAX_BUF_SIZE + 1]; + char buf[MAX_BUF_SIZE]; int r; if ((!path) || (!val)) return -EINVAL; - r = sysfs_read_buf(path, buf, MAX_BUF_SIZE); + r = sysfs_read_buf(path, buf, sizeof(buf)); if (r < 0) return r; @@ -97,13 +96,13 @@ int sysfs_read_str(char *path, char *str, int len) int sysfs_write_int(char *path, int val) { - char buf[MAX_BUF_SIZE + 1]; + char buf[MAX_BUF_SIZE]; int w; if (!path) return -EINVAL; - snprintf(buf, MAX_BUF_SIZE, "%d", val); + snprintf(buf, sizeof(buf), "%d", val); w = sysfs_write_buf(path, buf); if (w < 0) return w; |