bwrite.c - 9base - revived minimalist port of Plan 9 userland to Unix
 (HTM) git clone git://git.suckless.org/9base
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       bwrite.c (553B)
       ---
            1 #include        "lib9.h"
            2 #include        <bio.h>
            3 
            4 long
            5 Bwrite(Biobuf *bp, void *ap, long count)
            6 {
            7         long c;
            8         unsigned char *p;
            9         int i, n, oc;
           10 
           11         p = ap;
           12         c = count;
           13         oc = bp->ocount;
           14 
           15         while(c > 0) {
           16                 n = -oc;
           17                 if(n > c)
           18                         n = c;
           19                 if(n == 0) {
           20                         if(bp->state != Bwactive)
           21                                 return Beof;
           22                         i = write(bp->fid, bp->bbuf, bp->bsize);
           23                         if(i != bp->bsize) {
           24                                 bp->state = Binactive;
           25                                 return Beof;
           26                         }
           27                         bp->offset += i;
           28                         oc = -bp->bsize;
           29                         continue;
           30                 }
           31                 memmove(bp->ebuf+oc, p, n);
           32                 oc += n;
           33                 c -= n;
           34                 p += n;
           35         }
           36         bp->ocount = oc;
           37         return count-c;
           38 }