#pragma once #include #include #include /* * Buffer abstract data type */ struct scratchbuf { char *bytes; size_t size; bool need_free; }; void scratchbuf_init(struct scratchbuf *buf, char *stackbuf, size_t size); int scratchbuf_alloc(struct scratchbuf *buf, size_t sz); void scratchbuf_release(struct scratchbuf *buf); /* Return a C string */ static inline char *scratchbuf_str(struct scratchbuf *buf) { return buf->bytes; } #define SCRATCHBUF_INITIALIZER(buf_) { \ .bytes = buf_, \ .size = sizeof(buf_) + _array_size_chk(buf_), \ .need_free = false, \ }