• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * fread.c
3  */
4 
5 #include <errno.h>
6 #include <unistd.h>
7 #include <stdio.h>
8 
_fread(void * buf,size_t count,FILE * f)9 size_t _fread(void *buf, size_t count, FILE * f)
10 {
11     size_t bytes = 0;
12     ssize_t rv;
13     char *p = buf;
14 
15     while (count) {
16 	rv = read(fileno(f), p, count);
17 	if (rv == -1) {
18 	    if (errno == EINTR || errno == EAGAIN)
19 		continue;
20 	    else
21 		break;
22 	} else if (rv == 0) {
23 	    break;
24 	}
25 
26 	p += rv;
27 	bytes += rv;
28 	count -= rv;
29     }
30 
31     return bytes;
32 }
33