#include "buf.h" #include #include #include #include void buf_init(Buf *b) { b->data = malloc(4096); b->len = 0; b->cap = 4096; b->data[0] = 0; } void buf_free(Buf *b) { free(b->data); b->data = NULL; b->len = 0; b->cap = 0; } void buf_append(Buf *b, const char *s, size_t n) { while (b->len + n + 1 > b->cap) { b->cap *= 2; b->data = realloc(b->data, b->cap); } memcpy(b->data + b->len, s, n); b->len += n; b->data[b->len] = 0; } void buf_str(Buf *b, const char *s) { buf_append(b, s, strlen(s)); } void buf_fmt(Buf *b, const char *fmt, ...) { char tmp[4096]; va_list ap; va_start(ap, fmt); vsnprintf(tmp, sizeof(tmp), fmt, ap); va_end(ap); buf_str(b, tmp); }