diff options
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 24 |
1 files changed, 12 insertions, 12 deletions
@@ -30,31 +30,30 @@ 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; } static int sysfs_write_buf(char *path, char *buf) { int w, fd; - if ((!path) || (!buf)) + if (!path || !buf) return -EINVAL; fd = open(path, O_WRONLY); if (fd == -1) - return -ENOENT; + return -errno; w = write(fd, buf, strlen(buf)); close(fd); @@ -67,17 +66,18 @@ static 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; *val = atoi(buf); + return 0; } @@ -97,13 +97,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; |