Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/src/prelude/Binary/CopyBin_.p.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


#include <haskell2c.h>
#include "cLowBinary.h"

void hs_copyBinAux (BinHandle sbh,BinHandle dbh,int bytes)
{ 
   closecache(sbh);
   closecache(dbh);
   if (sbh->file) {
     lseek(sbh->loc.fd,0,SEEK_SET);
     if (dbh->file) {
       /*FILE->FILE*/
       char buf[BUFSIZ];
       lseek(dbh->loc.fd,0,SEEK_SET);
       while (bytes>BUFSIZ) {
         read(sbh->loc.fd,buf,BUFSIZ);
         write(dbh->loc.fd,buf,BUFSIZ);
         bytes -= BUFSIZ;
       }
       if (bytes) {
         read(sbh->loc.fd,buf,bytes);
         write(dbh->loc.fd,buf,bytes);
       }
     } else {
       /*FILE->MEM*/
       memcheck(dbh,bytes);
       read(sbh->loc.fd, (void*)(stableRef(dbh->loc.sp)+1+EXTRA), bytes);
       /*fprintf(stderr,"copyBin: %d bytes from file to mem at 0x%x\n", bytes,
                       (void*)(stableRef(dbh->loc.sp)+1+EXTRA));*/
       dbh->adjust.here = bytes;
     }
   } else {
     if (dbh->file) {
       /*MEM->FILE*/
       lseek(dbh->loc.fd,0,SEEK_SET);
       write(dbh->loc.fd, (void*)(stableRef(sbh->loc.sp)+1+EXTRA), bytes);
       /*fprintf(stderr,"copyBin: %d bytes from mem at 0x%x to file\n", bytes,
             (void*)(stableRef(sbh->loc.sp)+1+EXTRA));*/
     } else {
       /*MEM->MEM*/
       memcheck(dbh,bytes);
       memcpy((void*)(stableRef(dbh->loc.sp)+1+EXTRA),
              (void*)(stableRef(sbh->loc.sp)+1+EXTRA), bytes);
       dbh->adjust.here = bytes;
     }
     sbh->adjust.here = bytes;
   }
   dbh->highwater = sbh->highwater;
   opencache(sbh);
   opencache(dbh);
   /* POSTCONDITION: current pointer at *end* in both source and destination */
  return;
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.