[Toybox] [PATCH 1/2] Handle large read and write lengths.
Samanta Navarro
ferivoz at riseup.net
Sat Aug 7 05:11:13 PDT 2021
The functions readall and writeall can return an error value by mistake
if more than 2 GB of data are read or written.
This happens because int and ssize_t are of different sizes on 64 bit
architectures. Using ssize_t resolves the issue because read and write
return ssize_t already.
---
lib/lib.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/lib.c b/lib/lib.c
index 49fd5dd2..d4397327 100644
--- a/lib/lib.c
+++ b/lib/lib.c
@@ -112,7 +112,7 @@ ssize_t readall(int fd, void *buf, size_t len)
size_t count = 0;
while (count<len) {
- int i = read(fd, (char *)buf+count, len-count);
+ ssize_t i = read(fd, (char *)buf+count, len-count);
if (!i) break;
if (i<0) return i;
count += i;
@@ -127,7 +127,7 @@ ssize_t writeall(int fd, void *buf, size_t len)
size_t count = 0;
while (count<len) {
- int i = write(fd, count+(char *)buf, len-count);
+ ssize_t i = write(fd, count+(char *)buf, len-count);
if (i<1) return i;
count += i;
}
--
2.32.0
More information about the Toybox
mailing list