/* * fread.c */ #include #include #include 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; }