/* | |
* 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; | |
} |