diff options
author | wrmr | 2024-11-02 19:33:08 -0500 |
---|---|---|
committer | wrmr | 2024-11-02 19:33:08 -0500 |
commit | 610808a5902adad751a4acdbcc310803a51fed5d (patch) | |
tree | 76599dc60cccf6a3765f484dfa1b19e1af88efa1 /buf.c | |
parent | 58214ec5f982c1b97aadce254c958a5f922c9724 (diff) |
very different document data structure
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); +} |