Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #include "kolibc.h"
  2.  
  3. int write_buffer(FILE *f);
  4. int fill_buff(FILE* f);
  5.  
  6. int fwrite(const void* src,size_t size,size_t count,FILE* f)
  7. {
  8.   size_t req;
  9.   size_t cnt;
  10.  
  11. //append mode unsupported
  12.        
  13.   if(!((f->mode & FILE_OPEN_WRITE)|(f->mode & FILE_OPEN_PLUS)))
  14.     return EOF;
  15.        
  16.   req=count*size;
  17.   count=0;
  18.   while(req)
  19.   {
  20.     if(f->remain)
  21.     { cnt= req > f->remain ? f->remain : req;
  22.           memcpy(f->stream,src,cnt);
  23.           f->stream+=cnt;
  24.           f->strpos+=cnt;
  25.           f->remain-=cnt;
  26.           count+=cnt;
  27.           req-=cnt;
  28.         }
  29.         else
  30.         {
  31.           if(!write_buffer(f))
  32.             break;
  33.           f->filepos+=4096;
  34.           fill_buff(f);  
  35.         };
  36.   };
  37.   return count/size;
  38. };