Delete buffer stretchy functions
A buffer should be a strictly sized array representing a file in memory. No dynamic size functions.
This commit is contained in:
42
lib.c
42
lib.c
@@ -13,7 +13,6 @@ buffer_t *buffer_init_str(const char *name, const char *str, size_t str_size)
|
|||||||
buffer_t *buf = malloc(sizeof(*buf) + str_size + 1);
|
buffer_t *buf = malloc(sizeof(*buf) + str_size + 1);
|
||||||
buf->name = name;
|
buf->name = name;
|
||||||
buf->size = str_size;
|
buf->size = str_size;
|
||||||
buf->capacity = str_size;
|
|
||||||
if (str)
|
if (str)
|
||||||
{
|
{
|
||||||
memcpy(buf->data, str, str_size);
|
memcpy(buf->data, str, str_size);
|
||||||
@@ -22,47 +21,6 @@ buffer_t *buffer_init_str(const char *name, const char *str, size_t str_size)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool buffer_ensure(buffer_t **buffer, u64 expected)
|
|
||||||
{
|
|
||||||
if (!buffer)
|
|
||||||
return false;
|
|
||||||
else if (!*buffer)
|
|
||||||
{
|
|
||||||
*buffer = buffer_init_str(NULL, NULL, expected);
|
|
||||||
}
|
|
||||||
else if (buffer[0]->capacity <= expected)
|
|
||||||
{
|
|
||||||
buffer[0]->capacity = MAX(buffer[0]->capacity * 2, expected);
|
|
||||||
*buffer = realloc(*buffer, sizeof(**buffer) + buffer[0]->capacity);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool buffer_ensure_relative(buffer_t **buffer, u64 expected)
|
|
||||||
{
|
|
||||||
return buffer_ensure(buffer,
|
|
||||||
buffer && *buffer ? buffer[0]->size + expected : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool buffer_append(buffer_t **buffer, u8 datum)
|
|
||||||
{
|
|
||||||
bool ret = buffer_ensure_relative(buffer, 1);
|
|
||||||
if (ret)
|
|
||||||
buffer[0]->data[buffer[0]->size++] = datum;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool buffer_append_bytes(buffer_t **buffer, u8 *data, u64 size)
|
|
||||||
{
|
|
||||||
bool ret = buffer_ensure_relative(buffer, size);
|
|
||||||
if (ret)
|
|
||||||
{
|
|
||||||
memcpy(buffer[0]->data + buffer[0]->size, data, size);
|
|
||||||
buffer[0]->size += size;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void print_error(const char *handle, size_t row, size_t column,
|
void print_error(const char *handle, size_t row, size_t column,
|
||||||
const char *reason)
|
const char *reason)
|
||||||
{
|
{
|
||||||
|
|||||||
6
lib.h
6
lib.h
@@ -29,13 +29,9 @@ void print_error(const char *handle, size_t row, size_t column,
|
|||||||
typedef struct Buffer
|
typedef struct Buffer
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
u64 size, capacity;
|
u64 size;
|
||||||
u8 data[];
|
u8 data[];
|
||||||
} buffer_t;
|
} buffer_t;
|
||||||
|
|
||||||
buffer_t *buffer_init_str(const char *name, const char *str, size_t str_size);
|
buffer_t *buffer_init_str(const char *name, const char *str, size_t str_size);
|
||||||
bool buffer_ensure(buffer_t **buffer, u64 expected);
|
|
||||||
bool buffer_ensure_relative(buffer_t **buffer, u64 expected);
|
|
||||||
bool buffer_append(buffer_t **buffer, u8 datum);
|
|
||||||
bool buffer_append_bytes(buffer_t **buffer, u8 *data, u64 size);
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user