|
@@ -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;
|
|
|
}
|
|
|
}
|
|
|
}
|