diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-05-16 15:28:09 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-05-16 22:33:26 +0200 |
| commit | ff0fb0e5a5ef0da28d74d423e2c8ca534e549a4a (patch) | |
| tree | 2abe0ab01534dc148a2ff7c7e1a58af7ba07dc43 /buffer.c | |
| parent | b58c9169bb5986cd87a2f98fb8854c86638b70f6 (diff) | |
| download | vis-ff0fb0e5a5ef0da28d74d423e2c8ca534e549a4a.tar.gz vis-ff0fb0e5a5ef0da28d74d423e2c8ca534e549a4a.tar.xz | |
Cleanup general purpose buffer API
Introduce buffer_init to initialize a stack allocated buffer.
Rename buffer_{alloc,free} functions because they do something
different than the usual convention. They operate on the underlying
buffer data but do not allocate/free an actual Buffer struct.
Diffstat (limited to 'buffer.c')
| -rw-r--r-- | buffer.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -6,7 +6,11 @@ #define BUF_SIZE 1024 -bool buffer_alloc(Buffer *buf, size_t size) { +void buffer_init(Buffer *buf) { + memset(buf, 0, sizeof *buf); +} + +bool buffer_grow(Buffer *buf, size_t size) { if (size < BUF_SIZE) size = BUF_SIZE; if (buf->size < size) { @@ -25,17 +29,15 @@ void buffer_truncate(Buffer *buf) { buf->len = 0; } -void buffer_free(Buffer *buf) { +void buffer_release(Buffer *buf) { if (!buf) return; free(buf->data); - buf->data = NULL; - buf->len = 0; - buf->size = 0; + buffer_init(buf); } bool buffer_put(Buffer *buf, const void *data, size_t len) { - if (!buffer_alloc(buf, len)) + if (!buffer_grow(buf, len)) return false; memcpy(buf->data, data, len); buf->len = len; @@ -44,7 +46,7 @@ bool buffer_put(Buffer *buf, const void *data, size_t len) { bool buffer_append(Buffer *buf, const void *data, size_t len) { size_t rem = buf->size - buf->len; - if (len > rem && !buffer_alloc(buf, buf->size + len - rem)) + if (len > rem && !buffer_grow(buf, buf->size + len - rem)) return false; memcpy(buf->data + buf->len, data, len); buf->len += len; |
