From 5838c4acc08947c7bf643afcef12726899edc004 Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Wed, 25 Jul 2001 21:01:10 +0000 Subject: Fix fread bug reported by Vodz. The fix is straightforward, but I haven't tested it (lack of time). --- libc/stdio/stdio.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'libc/stdio/stdio.c') diff --git a/libc/stdio/stdio.c b/libc/stdio/stdio.c index a42750832..d6c950fd0 100644 --- a/libc/stdio/stdio.c +++ b/libc/stdio/stdio.c @@ -423,17 +423,19 @@ off_t _uClibc_fread(unsigned char *buf, off_t bytes, FILE *fp) goto FROM_BUF; } - TRY_READ: - len = read(fp->fd, p, (unsigned) bytes); - if (len < 0) { - if (errno == EINTR) { /* We were interrupted, so try again. */ - goto TRY_READ; - } - fp->mode |= __MODE_ERR; - } else { - p += len; - if (len == 0) { - fp->mode |= __MODE_EOF; + while (bytes) { + if ((len = read(fp->fd, p, (unsigned) bytes)) < 0) { + if (errno != EINTR) { /* We weren't interrupted, so error. */ + fp->mode |= __MODE_ERR; + break; + } + } else { + if (len == 0) { + fp->mode |= __MODE_EOF; + break; + } + bytes -= len; + p += len; } } } -- cgit v1.2.3