home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / lpopper.zip / files.c < prev    next >
C/C++ Source or Header  |  1999-11-09  |  1KB  |  69 lines

  1. #include "popper.h"
  2.  
  3. #define CACHESIZE 8192
  4. /*Appending from fFrom to end of fTo beginning from fFrom[From] to fFrom[To]*/
  5. int CopyBlock (FILE * fFrom, FILE * fTo, long From, long To)
  6. { char * Buffer;
  7.   long Size;
  8.   int Res;
  9.  
  10.   
  11.   Buffer=(char *)malloc(CACHESIZE);
  12.   if(Buffer==NULL) return(-1);
  13.  
  14.   fseek(fFrom, From, SEEK_SET);
  15.   fseek(fTo, 0, SEEK_END);
  16.   Size=To-From;
  17.  
  18.   do { if(Size<CACHESIZE)
  19.          { Res=fread(Buffer, Size, 1, fFrom);
  20.            if(Res<0)
  21.              { free(Buffer);
  22.                return(-1);
  23.              }
  24.            Res=fwrite(Buffer, Size, 1, fTo);
  25.            if(Res<0)
  26.              { free(Buffer);
  27.                return(-1);
  28.              }
  29.            Size=0;
  30.          }
  31.         else
  32.          { Res=fread(Buffer, CACHESIZE, 1, fFrom);
  33.            if(Res<0)
  34.              { free(Buffer);
  35.                return(-1);
  36.              }
  37.            Res=fwrite(Buffer, CACHESIZE, 1, fTo);
  38.            if(Res<0)
  39.              { free(Buffer);
  40.                return(-1);
  41.              }
  42.            Size-=CACHESIZE;
  43.          }
  44.  
  45.      }while(Size>0);
  46.  
  47.   return(0);
  48. }
  49.  
  50.  
  51. int AddBlock (FILE * fTo, char * Str)
  52. { int Res;
  53.  
  54.   fseek(fTo, 0, SEEK_END);
  55.   Res=fwrite(Str, strlen(Str), 1, fTo);
  56.   if(Res<0)
  57.     {
  58.       return(-1);
  59.     }
  60.  
  61.   return(0);
  62. }
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.