diff options
Diffstat (limited to 'buf.c')
-rw-r--r-- | buf.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/buf.c b/buf.c new file mode 100644 index 0000000..dd93116 --- /dev/null +++ b/buf.c @@ -0,0 +1,28 @@ +#include <stdlib.h> +#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); +} |