Blame


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