summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJohn Harrison <John.C.Harrison@Intel.com>2021-11-03 10:04:47 -0700
committerAshutosh Dixit <ashutosh.dixit@intel.com>2021-11-03 18:50:25 -0700
commitbc4cdf37ce1f320d35759beb8584fc711f01198d (patch)
tree9ae5b17aee2b58b682c345d082e3e0ad0ac981ad /lib
parenta771c069b5a9f7b56ecd5cd3b2de1f5a728bb259 (diff)
lib/igt_sysfs: Support large files
The syfs helper functions were all using basic 'int' data types for sizs, offsets, etc. when reading from sysfs. This works fine for little files, but not for large error capture logs (which can be gigabytes in sizes). Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/igt_sysfs.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/igt_sysfs.c b/lib/igt_sysfs.c
index 6919ac36..ee75e3ef 100644
--- a/lib/igt_sysfs.c
+++ b/lib/igt_sysfs.c
@@ -53,9 +53,11 @@
* provides basic support for like igt_sysfs_open().
*/
-static int readN(int fd, char *buf, int len)
+static ssize_t readN(int fd, char *buf, size_t len)
{
- int ret, total = 0;
+ ssize_t ret;
+ size_t total = 0;
+
do {
ret = read(fd, buf + total, len - total);
if (ret < 0)
@@ -69,9 +71,11 @@ static int readN(int fd, char *buf, int len)
return total ?: ret;
}
-static int writeN(int fd, const char *buf, int len)
+static ssize_t writeN(int fd, const char *buf, size_t len)
{
- int ret, total = 0;
+ ssize_t ret;
+ size_t total = 0;
+
do {
ret = write(fd, buf + total, len - total);
if (ret < 0)
@@ -218,8 +222,9 @@ bool igt_sysfs_set(int dir, const char *attr, const char *value)
char *igt_sysfs_get(int dir, const char *attr)
{
char *buf;
- int len, offset, rem;
- int ret, fd;
+ size_t len, offset, rem;
+ ssize_t ret;
+ int fd;
fd = openat(dir, attr, O_RDONLY);
if (igt_debug_on(fd < 0))