bwrite.c (586B)
1 #include "lib9.h" 2 3 #include <bio.h> 4 5 long Bwrite(Biobuf* bp, void* ap, long count) { 6 long c; 7 unsigned char* p; 8 int i, n, oc; 9 10 p = ap; 11 c = count; 12 oc = bp->ocount; 13 14 while (c > 0) { 15 n = -oc; 16 if (n > c) 17 n = c; 18 if (n == 0) { 19 if (bp->state != Bwactive) 20 return Beof; 21 i = write(bp->fid, bp->bbuf, bp->bsize); 22 if (i != bp->bsize) { 23 bp->state = Binactive; 24 return Beof; 25 } 26 bp->offset += i; 27 oc = -bp->bsize; 28 continue; 29 } 30 memmove(bp->ebuf + oc, p, n); 31 oc += n; 32 c -= n; 33 p += n; 34 } 35 bp->ocount = oc; 36 return count - c; 37 }