aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buffer.c16
-rw-r--r--buffer.h19
-rw-r--r--editor.c4
-rw-r--r--macro.h2
-rw-r--r--register.c8
-rw-r--r--register.h2
6 files changed, 30 insertions, 21 deletions
diff --git a/buffer.c b/buffer.c
index 6763676..1a3c7db 100644
--- a/buffer.c
+++ b/buffer.c
@@ -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;
diff --git a/buffer.h b/buffer.h
index fc509b8..ef5a537 100644
--- a/buffer.h
+++ b/buffer.h
@@ -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
diff --git a/editor.c b/editor.c
index 499e87a..4cb5e41 100644
--- a/editor.c
+++ b/editor.c
@@ -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);
}
diff --git a/macro.h b/macro.h
index c605cdf..c91fcca 100644
--- a/macro.h
+++ b/macro.h
@@ -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
diff --git a/register.c b/register.c
index cc25414..b1a4453 100644
--- a/register.c
+++ b/register.c
@@ -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;
diff --git a/register.h b/register.h
index 02890e8..5909c9a 100644
--- a/register.h
+++ b/register.h
@@ -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);