#include #include "buf.h" #include "err.h" void buf_init(struct buf *b, size_t n) { b->buf = calloc(1, n); if (!b->buf) { efatal("buf_init"); } b->cap = n; b->sz = 0; } void buf_grow(struct buf *b, size_t n) { size_t sz = b->sz + n; size_t c = b->cap; if (sz > c) { while (sz > c) c <<= 1; char *p = realloc(b->buf, c); if (!p) efatal("buf_grow"); b->buf = p; b->cap = c; } } void buf_free(struct buf *b) { free(b->buf); }