Subversion Repositories Kolibri OS

Rev

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

  1. #include <stdio.h>
  2. #include <kolibrisys.h>
  3.  
  4. int fwrite(void *buffer,int size,int count,FILE* file)
  5. {
  6.         dword res;
  7.         dword fullsize;
  8.  
  9.     if(!file || !buffer)
  10.     {
  11.         errno = E_INVALIDPTR;
  12.         return EOF;
  13.     }
  14.  
  15.  
  16.         if ((file->mode & 3)==FILE_OPEN_READ)
  17.     {
  18.         errno = E_ACCESS;
  19.         return 0;
  20.     }
  21.  
  22.         if ((file->mode &3)==FILE_OPEN_APPEND)
  23.                 file->filepos=file->filesize;
  24.  
  25.     fullsize=count*size;
  26.  
  27.         if ((file->filesize)<(file->filepos+fullsize))  file->filesize=file->filepos+fullsize;
  28.  
  29.         /*
  30.         if (file->mode==FILE_OPEN_APPEND)
  31.         {
  32.                 file->filepos==file->filesize;
  33.                 res=_ksys_appendtofile(file->filename,file->filepos,fullsize,buffer);
  34.                 if (res==0)
  35.                 {
  36.                         file->filepos+=fullsize;
  37.                         fullsize=fullsize/size;
  38.                         return(fullsize);
  39.                 }
  40.                 else return(0);
  41.  
  42.         }
  43.         */
  44.         if ((file->mode &3)==FILE_OPEN_WRITE || (file->mode&3)==FILE_OPEN_APPEND) // always true, as read checked previous
  45.         {
  46.                 if (file->filepos==0)
  47.                 {       //file mot created yet
  48.                         res=_ksys_rewritefile(file->filename,fullsize,buffer);
  49.                         if (res==0)
  50.                         {
  51.                                 file->filepos+=fullsize;
  52.                                 fullsize=fullsize/count;
  53.                                 return(fullsize);
  54.                         } else
  55.             {
  56.                 errno = -res;
  57.                 return(0);
  58.             }
  59.                 }
  60.                 else
  61.                 {
  62.                         res=_ksys_appendtofile(file->filename,file->filepos,fullsize,buffer);
  63.                         if (res==0)
  64.                         {
  65.                                 file->filepos+=fullsize;
  66.                                 fullsize=fullsize/count;
  67.                                 return(fullsize);
  68.                         } else
  69.             {
  70.                 errno = -res;
  71.                 return(0);
  72.             }
  73.                 }
  74.         }
  75.         else return(0);
  76. }
  77.