Lines Matching refs:mb

15 void membuff_purge(struct membuff *mb)  in membuff_purge()  argument
18 mb->head = mb->start; in membuff_purge()
19 mb->tail = mb->start; in membuff_purge()
22 static int membuff_putrawflex(struct membuff *mb, int maxlen, bool update, in membuff_putrawflex() argument
29 *data = &mb->start; in membuff_putrawflex()
30 *offsetp = mb->head - mb->start; in membuff_putrawflex()
33 if (!mb->start) in membuff_putrawflex()
40 if (mb->head >= mb->tail) { in membuff_putrawflex()
42 len = mb->end - mb->head - 1; in membuff_putrawflex()
48 mb->head += len; in membuff_putrawflex()
54 if ((maxlen < 0 || len < maxlen) && mb->tail != mb->start) { in membuff_putrawflex()
57 mb->head = mb->start; in membuff_putrawflex()
63 len = mb->tail - mb->head - 1; in membuff_putrawflex()
69 mb->head += len; in membuff_putrawflex()
76 int membuff_putraw(struct membuff *mb, int maxlen, bool update, char **data) in membuff_putraw() argument
82 size = membuff_putrawflex(mb, maxlen, update, &datap, &offset); in membuff_putraw()
88 bool membuff_putbyte(struct membuff *mb, int ch) in membuff_putbyte() argument
92 if (membuff_putraw(mb, 1, true, &data) != 1) in membuff_putbyte()
99 int membuff_getraw(struct membuff *mb, int maxlen, bool update, char **data) in membuff_getraw() argument
110 if (mb->head > mb->tail) { in membuff_getraw()
112 *data = mb->tail; in membuff_getraw()
113 len = mb->head - mb->tail; in membuff_getraw()
121 mb->tail += len; in membuff_getraw()
129 else if (mb->head < mb->tail) { in membuff_getraw()
131 *data = mb->tail; in membuff_getraw()
132 len = mb->end - mb->tail; in membuff_getraw()
136 mb->tail += len; in membuff_getraw()
137 if (mb->tail == mb->end) in membuff_getraw()
138 mb->tail = mb->start; in membuff_getraw()
143 maxlen, update, (int)(mb->head - mb->start), in membuff_getraw()
144 (int)(mb->tail - mb->start), (int)(*data - mb->start), len); in membuff_getraw()
150 int membuff_getbyte(struct membuff *mb) in membuff_getbyte() argument
154 return membuff_getraw(mb, 1, true, &data) != 1 ? -1 : *(uint8_t *)data; in membuff_getbyte()
157 int membuff_peekbyte(struct membuff *mb) in membuff_peekbyte() argument
161 return membuff_getraw(mb, 1, false, &data) != 1 ? -1 : *(uint8_t *)data; in membuff_peekbyte()
164 int membuff_get(struct membuff *mb, char *buff, int maxlen) in membuff_get() argument
175 len = membuff_getraw(mb, maxlen, true, &data); in membuff_get()
187 int membuff_put(struct membuff *mb, const char *buff, int length) in membuff_put() argument
194 towrite = membuff_putraw(mb, length, true, &data); in membuff_put()
207 bool membuff_isempty(struct membuff *mb) in membuff_isempty() argument
209 return mb->head == mb->tail; in membuff_isempty()
212 int membuff_avail(struct membuff *mb) in membuff_avail() argument
219 copy = *mb; in membuff_avail()
229 int membuff_size(struct membuff *mb) in membuff_size() argument
231 return mb->end - mb->start; in membuff_size()
234 bool membuff_makecontig(struct membuff *mb) in membuff_makecontig() argument
239 (int)(mb->head - mb->start), (int)(mb->tail - mb->start), in membuff_makecontig()
240 (int)(mb->end - mb->start)); in membuff_makecontig()
246 if (mb->tail > mb->head) { in membuff_makecontig()
252 topsize = mb->end - mb->tail; in membuff_makecontig()
253 botsize = mb->head - mb->start; in membuff_makecontig()
259 if (mb->head + topsize >= mb->tail) in membuff_makecontig()
261 memmove(mb->start + topsize, mb->start, botsize); in membuff_makecontig()
266 topsize = mb->head - mb->tail; in membuff_makecontig()
271 memcpy(mb->start, mb->tail, topsize); in membuff_makecontig()
272 debug(" - memcpy(%d, %d, %d)", 0, (int)(mb->tail - mb->start), topsize); in membuff_makecontig()
275 mb->tail = mb->start; in membuff_makecontig()
276 mb->head = mb->start + topsize + botsize; in membuff_makecontig()
278 debug(" - head=%d, tail=%d", (int)(mb->head - mb->start), in membuff_makecontig()
279 (int)(mb->tail - mb->start)); in membuff_makecontig()
285 int membuff_free(struct membuff *mb) in membuff_free() argument
287 return mb->end == mb->start ? 0 : in membuff_free()
288 (mb->end - mb->start) - 1 - membuff_avail(mb); in membuff_free()
291 int membuff_readline(struct membuff *mb, char *str, int maxlen, int minch) in membuff_readline() argument
298 end = mb->head >= mb->tail ? mb->head : mb->end; in membuff_readline()
299 for (len = 0, s = mb->tail; s < end && len < maxlen - 1; str++) { in membuff_readline()
306 if (s == end && mb->tail > mb->head) { in membuff_readline()
307 s = mb->start; in membuff_readline()
308 end = mb->head; in membuff_readline()
321 mb->tail = s == mb->end ? mb->start : s; in membuff_readline()
326 int membuff_extend_by(struct membuff *mb, int by, int max) in membuff_extend_by() argument
334 for (orig = mb->end - mb->start, size = orig; size < orig + by;) in membuff_extend_by()
344 oldhead = mb->head - mb->start; in membuff_extend_by()
345 oldtail = mb->tail - mb->start; in membuff_extend_by()
346 ptr = realloc(mb->start, size); in membuff_extend_by()
349 mb->start = ptr; in membuff_extend_by()
350 mb->head = mb->start + oldhead; in membuff_extend_by()
351 mb->tail = mb->start + oldtail; in membuff_extend_by()
353 if (mb->head < mb->tail) { in membuff_extend_by()
354 memmove(mb->tail + by, mb->tail, orig - oldtail); in membuff_extend_by()
355 mb->tail += by; in membuff_extend_by()
357 mb->end = mb->start + size; in membuff_extend_by()
362 void membuff_init(struct membuff *mb, char *buff, int size) in membuff_init() argument
364 mb->start = buff; in membuff_init()
365 mb->end = mb->start + size; in membuff_init()
366 membuff_purge(mb); in membuff_init()
369 int membuff_new(struct membuff *mb, int size) in membuff_new() argument
371 mb->start = malloc(size); in membuff_new()
372 if (!mb->start) in membuff_new()
375 membuff_init(mb, mb->start, size); in membuff_new()
379 void membuff_uninit(struct membuff *mb) in membuff_uninit() argument
381 mb->end = NULL; in membuff_uninit()
382 mb->start = NULL; in membuff_uninit()
383 membuff_purge(mb); in membuff_uninit()
386 void membuff_dispose(struct membuff *mb) in membuff_dispose() argument
388 free(&mb->start); in membuff_dispose()
389 membuff_uninit(mb); in membuff_dispose()