#include "lib9.h" | |
#include <bio.h> | |
long | |
Bwrite(Biobuf *bp, void *ap, long count) | |
{ | |
long c; | |
unsigned char *p; | |
int i, n, oc; | |
p = ap; | |
c = count; | |
oc = bp->ocount; | |
while(c > 0) { | |
n = -oc; | |
if(n > c) | |
n = c; | |
if(n == 0) { | |
if(bp->state != Bwactive) | |
return Beof; | |
i = write(bp->fid, bp->bbuf, bp->bsize); | |
if(i != bp->bsize) { | |
bp->state = Binactive; | |
return Beof; | |
} | |
bp->offset += i; | |
oc = -bp->bsize; | |
continue; | |
} | |
memmove(bp->ebuf+oc, p, n); | |
oc += n; | |
c -= n; | |
p += n; | |
} | |
bp->ocount = oc; | |
return count-c; | |
} |