| #pragma once |
| |
| #include <stdbool.h> |
| #include <stdlib.h> |
| |
| #include <shared/macro.h> |
| |
| /* |
| * 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, \ |
| } |