#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, \ | |
} |