home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amigappc / libsrc / stdio / fread.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-24  |  918 b   |  39 lines

  1. /*
  2. ** vbcc-Amiga-PowerPC version of fread.c
  3. **
  4. ** v0.1 04.10.97 phx
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <powerup/gcclib/powerup_protos.h>
  9.  
  10. size_t fread(void *ptr,size_t size,size_t nmemb,FILE *f)
  11. {
  12.     size_t cnt,total=size*nmemb;
  13.     char *p=ptr;
  14.     long result;
  15.     if(!f||!total) return(0);
  16.     if((f->flags&(_READABLE|_WRITE|_ERR|_EOF))!=_READABLE) return(0);
  17.     f->flags|=_READ;
  18.     if(cnt=f->count){
  19.     /*  Buffer lesen    */
  20.         if(total<=cnt){
  21.             memcpy(p,f->pointer,total);
  22.             f->pointer+=total;f->count-=total;
  23.             return(nmemb);
  24.         }else{
  25.             memcpy(p,f->pointer,cnt);
  26.             total-=cnt;p+=cnt;
  27.             f->count=0;
  28.         }
  29.     }
  30.     result=PPCRead((BPTR)f->filehandle,p,total);
  31.     if(result==-1){f->flags|=_ERR;return(cnt/size);}
  32.     if(result<total){
  33.         f->flags|=_EOF;
  34.         return((cnt+result)/size);
  35.     }else{
  36.         return(nmemb);
  37.     }
  38. }
  39.