Lines Matching refs:b

10 sizecache(Buffer *b, uint n)  in sizecache()  argument
12 if(n <= b->cmax) in sizecache()
14 b->cmax = n+Slop; in sizecache()
15 b->c = runerealloc(b->c, b->cmax); in sizecache()
20 addblock(Buffer *b, uint i, uint n) in addblock() argument
22 if(i > b->nbl) in addblock()
25 b->bl = realloc(b->bl, (b->nbl+1)*sizeof b->bl[0]); in addblock()
26 if(i < b->nbl) in addblock()
27 memmove(b->bl+i+1, b->bl+i, (b->nbl-i)*sizeof(Block*)); in addblock()
28 b->bl[i] = disknewblock(disk, n); in addblock()
29 b->nbl++; in addblock()
35 delblock(Buffer *b, uint i) in delblock() argument
37 if(i >= b->nbl) in delblock()
40 diskrelease(disk, b->bl[i]); in delblock()
41 b->nbl--; in delblock()
42 if(i < b->nbl) in delblock()
43 memmove(b->bl+i, b->bl+i+1, (b->nbl-i)*sizeof(Block*)); in delblock()
44 b->bl = realloc(b->bl, b->nbl*sizeof b->bl[0]); in delblock()
54 flush(Buffer *b) in flush() argument
56 if(b->cdirty || b->cnc==0){ in flush()
57 if(b->cnc == 0) in flush()
58 delblock(b, b->cbi); in flush()
60 diskwrite(disk, &b->bl[b->cbi], b->c, b->cnc); in flush()
61 b->cdirty = FALSE; in flush()
67 setcache(Buffer *b, uint q0) in setcache() argument
72 if(q0 > b->nc) in setcache()
77 if(b->nc == 0 || (b->cq<=q0 && q0<b->cq+b->cnc)) in setcache()
82 if(q0==b->nc && q0==b->cq+b->cnc && b->cnc<=Maxblock) in setcache()
84 flush(b); in setcache()
86 if(q0 < b->cq){ in setcache()
90 q = b->cq; in setcache()
91 i = b->cbi; in setcache()
93 blp = &b->bl[i]; in setcache()
94 while(q+(*blp)->n <= q0 && q+(*blp)->n < b->nc){ in setcache()
98 if(i >= b->nbl) in setcache()
103 b->cbi = i; in setcache()
104 b->cq = q; in setcache()
105 sizecache(b, bl->n); in setcache()
106 b->cnc = bl->n; in setcache()
108 diskread(disk, bl, b->c, b->cnc); in setcache()
112 bufinsert(Buffer *b, uint q0, Rune *s, uint n) in bufinsert() argument
116 if(q0 > b->nc) in bufinsert()
120 setcache(b, q0); in bufinsert()
121 off = q0-b->cq; in bufinsert()
122 if(b->cnc+n <= Maxblock){ in bufinsert()
124 t = b->cnc+n; in bufinsert()
126 if(b->bl == nil){ /* allocate */ in bufinsert()
127 if(b->cnc != 0) in bufinsert()
129 addblock(b, 0, t); in bufinsert()
130 b->cbi = 0; in bufinsert()
132 sizecache(b, t); in bufinsert()
133 runemove(b->c+off+m, b->c+off, b->cnc-off); in bufinsert()
134 runemove(b->c+off, s, m); in bufinsert()
135 b->cnc = t; in bufinsert()
143 if(q0==b->cq || q0==b->cq+b->cnc){ in bufinsert()
144 if(b->cdirty) in bufinsert()
145 flush(b); in bufinsert()
147 if(b->bl == nil){ /* allocate */ in bufinsert()
148 if(b->cnc != 0) in bufinsert()
152 i = b->cbi; in bufinsert()
153 if(q0 > b->cq) in bufinsert()
156 addblock(b, i, m); in bufinsert()
157 sizecache(b, m); in bufinsert()
158 runemove(b->c, s, m); in bufinsert()
159 b->cq = q0; in bufinsert()
160 b->cbi = i; in bufinsert()
161 b->cnc = m; in bufinsert()
168 m = b->cnc-off; in bufinsert()
170 i = b->cbi+1; in bufinsert()
171 addblock(b, i, m); in bufinsert()
172 diskwrite(disk, &b->bl[i], b->c+off, m); in bufinsert()
173 b->cnc -= m; in bufinsert()
179 m = min(n, Maxblock-b->cnc); in bufinsert()
180 sizecache(b, b->cnc+m); in bufinsert()
181 runemove(b->c+b->cnc, s, m); in bufinsert()
182 b->cnc += m; in bufinsert()
184 b->nc += m; in bufinsert()
188 b->cdirty = TRUE; in bufinsert()
193 bufdelete(Buffer *b, uint q0, uint q1) in bufdelete() argument
197 if(!(q0<=q1 && q0<=b->nc && q1<=b->nc)) in bufdelete()
200 setcache(b, q0); in bufdelete()
201 off = q0-b->cq; in bufdelete()
202 if(q1 > b->cq+b->cnc) in bufdelete()
203 n = b->cnc - off; in bufdelete()
206 m = b->cnc - (off+n); in bufdelete()
208 runemove(b->c+off, b->c+off+n, m); in bufdelete()
209 b->cnc -= n; in bufdelete()
210 b->cdirty = TRUE; in bufdelete()
212 b->nc -= n; in bufdelete()
217 bufload(Buffer *b, uint q0, int fd, int *nulls) in bufload() argument
224 if(q0 > b->nc) in bufload()
251 bufinsert(b, q1, r, nr); in bufload()
260 bufread(Buffer *b, uint q0, Rune *s, uint n) in bufread() argument
264 if(!(q0<=b->nc && q0+n<=b->nc)) in bufread()
268 setcache(b, q0); in bufread()
269 m = min(n, b->cnc-(q0-b->cq)); in bufread()
270 runemove(s, b->c+(q0-b->cq), m); in bufread()
278 bufreset(Buffer *b) in bufreset() argument
282 b->nc = 0; in bufreset()
283 b->cnc = 0; in bufreset()
284 b->cq = 0; in bufreset()
285 b->cdirty = 0; in bufreset()
286 b->cbi = 0; in bufreset()
288 for(i=b->nbl-1; --i>=0; ) in bufreset()
289 delblock(b, i); in bufreset()
293 bufclose(Buffer *b) in bufclose() argument
295 bufreset(b); in bufclose()
296 free(b->c); in bufclose()
297 b->c = nil; in bufclose()
298 b->cnc = 0; in bufclose()
299 free(b->bl); in bufclose()
300 b->bl = nil; in bufclose()
301 b->nbl = 0; in bufclose()