From 301ad6d3a7a0684f4e4c14a48c6e8b8de5567ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 25 Feb 2016 16:50:30 +0100 Subject: vis: ignore trailing NUL byte of register content by default This is handy when editing registers used for macros. --- buffer.c | 7 +++++++ buffer.h | 2 ++ register.c | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) 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(®->buf); return reg->buf.data; case REGISTER_CLIPBOARD: { -- cgit v1.2.3