#include <u.h>#include <libc.h>#include <bio.h> longBwrite(Biobufhdr *bp, void *ap, long count){ long c; uchar *p; int i, n, oc; char errbuf[ERRMAX]; 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) { errstr(errbuf, sizeof errbuf); if(strstr(errbuf, "interrupt") == nil) bp->state = Binactive; errstr(errbuf, sizeof errbuf); 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;}
#include <u.h>
#include <libc.h>
#include <bio.h>
long
Bwrite(Biobufhdr *bp, void *ap, long count)
{
long c;
uchar *p;
int i, n, oc;
char errbuf[ERRMAX];
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) {
errstr(errbuf, sizeof errbuf);
if(strstr(errbuf, "interrupt") == nil)
bp->state = Binactive;
errstr(errbuf, sizeof errbuf);
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;
}