Skip to content

Commit

Permalink
musl: fix __stdio_read.c to conform to new Musl
Browse files Browse the repository at this point in the history
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 <nyh@scylladb.com>
Message-Id: <20201228135352.3246222-1-nyh@scylladb.com>
  • Loading branch information
nyh authored and wkozaczuk committed Dec 28, 2020
1 parent d70d093 commit 0d4d8fd
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion libc/stdio/__stdio_read.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 0d4d8fd

Please sign in to comment.