aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buffer.c7
-rw-r--r--buffer.h2
-rw-r--r--register.c2
3 files changed, 10 insertions, 1 deletions
diff --git a/buffer.c b/buffer.c
index b9bc28c..c4830d6 100644
--- a/buffer.c
+++ b/buffer.c
@@ -88,3 +88,10 @@ bool buffer_prepend(Buffer *buf, const void *data, size_t len) {
bool buffer_prepend0(Buffer *buf, const char *data) {
return buffer_prepend(buf, data, strlen(data) + (buf->len == 0));
}
+
+size_t buffer_length0(Buffer *buf) {
+ size_t len = buf->len;
+ if (len > 0 && buf->data[len-1] == '\0')
+ len--;
+ return len;
+}
diff --git a/buffer.h b/buffer.h
index 037055b..7e3c342 100644
--- a/buffer.h
+++ b/buffer.h
@@ -38,5 +38,7 @@ bool buffer_append0(Buffer*, const char *data);
bool buffer_prepend(Buffer*, const void *data, size_t len);
/* prepend NUL-terminated data */
bool buffer_prepend0(Buffer*, const char *data);
+/* return length of a buffer without trailing NUL byte */
+size_t buffer_length0(Buffer*);
#endif
diff --git a/register.c b/register.c
index 518f93a..7a90f52 100644
--- a/register.c
+++ b/register.c
@@ -30,7 +30,7 @@ void register_release(Register *reg) {
const char *register_get(Vis *vis, Register *reg, size_t *len) {
switch (reg->type) {
case REGISTER_NORMAL:
- *len = reg->buf.len;
+ *len = buffer_length0(&reg->buf);
return reg->buf.data;
case REGISTER_CLIPBOARD:
{