| /* | |
| * fread.c | |
| */ | |
| #include <errno.h> | |
| #include <unistd.h> | |
| #include <stdio.h> | |
| size_t _fread(void *buf, size_t count, FILE * f) | |
| { | |
| size_t bytes = 0; | |
| ssize_t rv; | |
| char *p = buf; | |
| while (count) { | |
| rv = read(fileno(f), p, count); | |
| if (rv == -1) { | |
| if (errno == EINTR || errno == EAGAIN) | |
| continue; | |
| else | |
| break; | |
| } else if (rv == 0) { | |
| break; | |
| } | |
| p += rv; | |
| bytes += rv; | |
| count -= rv; | |
| } | |
| return bytes; | |
| } |