1#pragma once 2 3#include <stdbool.h> 4#include <stdlib.h> 5 6#include <shared/macro.h> 7 8/* 9 * Buffer abstract data type 10 */ 11struct scratchbuf { 12 char *bytes; 13 size_t size; 14 bool need_free; 15}; 16 17void scratchbuf_init(struct scratchbuf *buf, char *stackbuf, size_t size); 18int scratchbuf_alloc(struct scratchbuf *buf, size_t sz); 19void scratchbuf_release(struct scratchbuf *buf); 20 21/* Return a C string */ 22static inline char *scratchbuf_str(struct scratchbuf *buf) 23{ 24 return buf->bytes; 25} 26 27#define SCRATCHBUF_INITIALIZER(buf_) { \ 28 .bytes = buf_, \ 29 .size = sizeof(buf_) + _array_size_chk(buf_), \ 30 .need_free = false, \ 31} 32