mirror of
https://github.com/fluencelabs/musl
synced 2025-04-24 14:52:13 +00:00
consistently return number of bytes read from stdio read backend
the stdio FILE read backend's return type is size_t, not ssize_t, and all of the special (non-fd-backed) FILE types already return the number of bytes read (zero) on error or eof. only __stdio_read leaked a syscall error return into its return value. fread had a workaround for this behavior going all the way back to the original check-in. remove the workaround since it's no longer needed.
This commit is contained in:
parent
9bf9c732f9
commit
f92804188e
@ -12,7 +12,7 @@ size_t __stdio_read(FILE *f, unsigned char *buf, size_t len)
|
||||
cnt = syscall(SYS_readv, f->fd, iov, 2);
|
||||
if (cnt <= 0) {
|
||||
f->flags |= cnt ? F_ERR : F_EOF;
|
||||
return cnt;
|
||||
return 0;
|
||||
}
|
||||
if (cnt <= iov[0].iov_len) return cnt;
|
||||
cnt -= iov[0].iov_len;
|
||||
|
@ -25,7 +25,7 @@ size_t fread(void *restrict destv, size_t size, size_t nmemb, FILE *restrict f)
|
||||
/* Read the remainder directly */
|
||||
for (; l; l-=k, dest+=k) {
|
||||
k = __toread(f) ? 0 : f->read(f, dest, l);
|
||||
if (k+1<=1) {
|
||||
if (!k) {
|
||||
FUNLOCK(f);
|
||||
return (len-l)/size;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user