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