blob: 2dfeaaad04cb0d8ef4d68966eb1f18b4389227aa [file] [log] [blame]
rscb2cfc4e2003-09-30 17:47:41 +00001#include "lib9.h"
2#include <bio.h>
3
4long
5Bwrite(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}