Lines Matching refs:b
15 Buf *b; in bopen() local
21 b = emalloc(sizeof(*b)); in bopen()
22 b->data = emalloc(bs*nblock); in bopen()
23 b->ndata = 0; in bopen()
24 b->nblock = nblock; in bopen()
25 b->bs = bs; in bopen()
26 b->omode = omode; in bopen()
27 b->fn = fn; /* function to read or write bs-byte blocks */ in bopen()
29 return b; in bopen()
33 bread(Buf *b, void *v, long n, vlong off) in bread() argument
38 assert(b->omode == OREAD); in bread()
41 if(b->off > off || off >= b->off+b->ndata) { in bread()
42 noff = off - off % b->bs; in bread()
45 if((m = b->fn(b, b->data, b->nblock, noff/b->bs)) <= 0) { in bread()
50 b->ndata = b->bs * m; in bread()
51 b->off = noff; in bread()
53 fprint(2, "got %ld\n", b->ndata); in bread()
58 off -= b->off; in bread()
59 if(n > b->ndata - off) in bread()
60 n = b->ndata - off; in bread()
61 memmove(v, b->data+off, n); in bread()
66 bwrite(Buf *b, void *v, long n) in bwrite() argument
75 mdata = b->bs*b->nblock; in bwrite()
76 m = mdata - b->ndata; in bwrite()
79 memmove(b->data+b->ndata, p, m); in bwrite()
82 b->ndata += m; in bwrite()
85 if(b->ndata == mdata) { in bwrite()
86 if(b->fn(b, b->data, b->nblock, 0) < 0) { in bwrite()
91 b->ndata = 0; in bwrite()
99 memmove(b->data, p, n); in bwrite()
100 b->ndata = n; in bwrite()
107 bterm(Buf *b) in bterm() argument
110 if(b->omode == OWRITE && b->ndata) in bterm()
111 b->fn(b, b->data, (b->ndata + b->bs - 1)/b->bs, 0); in bterm()
113 free(b->data); in bterm()
114 free(b); in bterm()