Browse Source

fix logic error in fread

fread was calling f->read without checking that the file was in
reading mode. this could:
1. crash, if f->read was a null pointer
2. cause unwanted blocking on a terminal already at eof
3. allow reading on a write-only file
rs-1.0
Rich Felker 15 years ago
parent
commit
94a0171d80
  1. 7
      src/stdio/fread.c

7
src/stdio/fread.c

@ -21,14 +21,9 @@ size_t fread(void *destv, size_t size, size_t nmemb, FILE *f)
l -= k;
}
if (!l) {
FUNLOCK(f);
return nmemb;
}
/* Read the remainder directly */
for (; l; l-=k, dest+=k) {
k = f->read(f, dest, l);
k = __toread(f) ? 0 : f->read(f, dest, l);
if (k+1<=1) {
FUNLOCK(f);
return (len-l)/size;

Loading…
Cancel
Save