diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2018-05-27 00:01:08 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2018-06-01 09:48:21 +0300 |
commit | 6df2b6e22e0720173cec23669ecf3f99ee9f21eb (patch) | |
tree | 7a633a5f2116cece0ab5edc628ec3e8ca7a7f9fa | |
parent | 571e148aaec20c26c308d6611cdb1f34ec81ff1e (diff) |
configfs: Restructure attribute read to support binary attributes
Modify the attribute_read() function to not add a terminating 0 to the
buffer, and to return the number of bytes read, in order to support
binary attributes. The attribute_read_uint() and attribute_read_str()
functions are modified accordingly to use the new attribute_read()
semantics.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r-- | configfs.c | 20 |
1 files changed, 11 insertions, 9 deletions
@@ -53,7 +53,7 @@ static char *path_glob_first_match(const char *g) * Attribute handling */ -static int attribute_read(const char *path, const char *file, char *buf, +static int attribute_read(const char *path, const char *file, void *buf, unsigned int len) { char *f; @@ -72,7 +72,7 @@ static int attribute_read(const char *path, const char *file, char *buf, return -ENOENT; } - ret = read(fd, buf, len - 1); + ret = read(fd, buf, len); close(fd); if (ret < 0) { @@ -81,9 +81,7 @@ static int attribute_read(const char *path, const char *file, char *buf, return -ENODATA; } - buf[ret] = '\0'; - - return 0; + return len; } static int attribute_read_uint(const char *path, const char *file, @@ -94,10 +92,12 @@ static int attribute_read_uint(const char *path, const char *file, char *endptr; int ret; - ret = attribute_read(path, file, buf, sizeof(buf)); - if (ret) + ret = attribute_read(path, file, buf, sizeof(buf) - 1); + if (ret < 0) return ret; + buf[ret] = '\0'; + errno = 0; /* base 0: Autodetect hex, octal, decimal. */ @@ -117,10 +117,12 @@ static char *attribute_read_str(const char *path, const char *file) char *p; int ret; - ret = attribute_read(path, file, buf, sizeof(buf)); - if (ret) + ret = attribute_read(path, file, buf, sizeof(buf) - 1); + if (ret < 0) return NULL; + buf[ret] = '\0'; + p = strrchr(buf, '\n'); if (p != buf) *p = '\0'; |