Blob


1 #include "lib9.h"
2 #include <bio.h>
4 long
5 Bwrite(Biobuf *bp, void *ap, long count)
6 {
7 long c;
8 unsigned char *p;
9 int i, n, oc;
11 p = ap;
12 c = count;
13 oc = bp->ocount;
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 }