From: Nadav Har'El <n...@scylladb.com>
Committer: Waldemar Kozaczuk <jwkozac...@gmail.com>
Branch: master

musl: fix __stdio_read.c to conform to new Musl

We have our own copy of __stdio_read.c because it was too complicated
to take Musl's as-is because of locking differences. However, there was
one recent change to that file we forgot to take:

In commit f92804188 in Musl's repository, Rich Felker (in Feb. 2018),
changed fread() to assume that f->read() returns 0 on error, instead
of -1. The same patch fixes __stdio_read() to return 0, and we need
to do this as well.

Without this patch, when the new Musl's fread() encounters an error (e.g.,
when you try to read from a directory), it will go into an infinite
loop - each iteration increases the remaining bytes (by 1) instead of
decreasing it by the number of read bytes as normal.

Signed-off-by: Nadav Har'El <n...@scylladb.com>
Message-Id: <20201228135352.3246222-1-...@scylladb.com>

---
diff --git a/libc/stdio/__stdio_read.c b/libc/stdio/__stdio_read.c
--- a/libc/stdio/__stdio_read.c
+++ b/libc/stdio/__stdio_read.c
@@ -30,7 +30,7 @@ size_t __stdio_read(FILE *f, unsigned char *buf, size_t len)
        if (cnt <= 0) {
                f->flags |= F_EOF ^ ((F_ERR^F_EOF) & cnt);
                f->rpos = f->rend = 0;
-               return cnt;
+               return 0;
        }
        if (cnt <= len) return cnt;
        cnt -= len;

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/0000000000006bb4f305b78bceb8%40google.com.

Reply via email to