home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <unistd.h>
-
- extern void __chkabort(void);
- extern int __fflush(FILE *stream);
-
- size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream)
- {
- signed long subsize;
- unsigned long total;
- unsigned char *b;
- __chkabort();
- if(stream->flags&64) /* Error on stream */
- { errno=EPERM;
- return 0; }
- if (!(total=size*nmemb))
- return 0;
- b=(unsigned char *)ptr;
- if(stream->flags&8)
- { if(__fflush(stream))
- return 0;
- }else
- while(total&&(stream->incount||stream->tmpp!=NULL))
- { total--;
- *b++=fgetc(stream); } /* read the buffer */
- while(total)
- {
- subsize=read(stream->file,b,total);
- if(subsize==0)
- {
- stream->flags|=32;
- break;
- }else if(subsize<0) /* Error */
- {
- stream->flags|=64; /* error flag */
- break;
- }
- total=total-subsize;
- b=b+subsize;
- }
- return (b-(unsigned char *)ptr)/size;
- }
-