You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
620 B
32 lines
620 B
#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, \
|
|
}
|