diff options
| -rw-r--r-- | buffer.c | 16 | ||||
| -rw-r--r-- | buffer.h | 19 | ||||
| -rw-r--r-- | editor.c | 4 | ||||
| -rw-r--r-- | macro.h | 2 | ||||
| -rw-r--r-- | register.c | 8 | ||||
| -rw-r--r-- | register.h | 2 |
6 files changed, 30 insertions, 21 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; @@ -5,16 +5,23 @@ #include <stdbool.h> #include "text.h" -typedef struct { +typedef struct { /* a dynamically growing buffer storing arbitrary data */ char *data; /* NULL if empty */ size_t len; /* current length of data */ size_t size; /* maximal capacity of the buffer */ } Buffer; -void buffer_free(Buffer *buf); -bool buffer_alloc(Buffer *buf, size_t size); -void buffer_truncate(Buffer *buf); -bool buffer_put(Buffer *buf, const void *data, size_t len); -bool buffer_append(Buffer *buf, const void *data, size_t len); +/* initalize a (stack allocated) Buffer insteance */ +void buffer_init(Buffer*); +/* relase/free all data stored in this buffer, reset size to zero */ +void buffer_release(Buffer*); +/* reserve space to store at least size bytes in this buffer.*/ +bool buffer_grow(Buffer*, size_t size); +/* truncate buffer, but keep associated memory region for further data */ +void buffer_truncate(Buffer*); +/* replace buffer content with given data, growing the buffer if needed */ +bool buffer_put(Buffer*, const void *data, size_t len); +/* append futher content to the end of the buffer data */ +bool buffer_append(Buffer*, const void *data, size_t len); #endif @@ -410,12 +410,12 @@ void editor_free(Editor *ed) { window_free(ed->prompt); text_regex_free(ed->search_pattern); for (int i = 0; i < REG_LAST; i++) - register_free(&ed->registers[i]); + register_release(&ed->registers[i]); editor_syntax_unload(ed); ed->ui->free(ed->ui); map_free(ed->cmds); map_free(ed->options); - buffer_free(&ed->buffer_repeat); + buffer_release(&ed->buffer_repeat); free(ed); } @@ -4,7 +4,7 @@ #include "buffer.h" typedef Buffer Macro; -#define macro_free buffer_free +#define macro_release buffer_release #define macro_reset buffer_truncate #define macro_append buffer_append @@ -6,13 +6,13 @@ #include "text.h" #include "util.h" -void register_free(Register *reg) { - buffer_free((Buffer*)reg); +void register_release(Register *reg) { + buffer_release((Buffer*)reg); } bool register_put(Register *reg, Text *txt, Filerange *range) { size_t len = range->end - range->start; - if (!buffer_alloc((Buffer*)reg, len)) + if (!buffer_grow((Buffer*)reg, len)) return false; reg->len = text_bytes_get(txt, range->start, len, reg->data); return true; @@ -21,7 +21,7 @@ bool register_put(Register *reg, Text *txt, Filerange *range) { bool register_append(Register *reg, Text *txt, Filerange *range) { size_t rem = reg->size - reg->len; size_t len = range->end - range->start; - if (len > rem && !buffer_alloc((Buffer*)reg, reg->size + len - rem)) + if (len > rem && !buffer_grow((Buffer*)reg, reg->size + len - rem)) return false; reg->len += text_bytes_get(txt, range->start, len, reg->data + reg->len); return true; @@ -13,7 +13,7 @@ typedef struct { bool linewise; /* place register content on a new line when inserting? */ } Register; -void register_free(Register *reg); +void register_release(Register *reg); bool register_put(Register *reg, Text *txt, Filerange *range); bool register_append(Register *reg, Text *txt, Filerange *range); |
