diff options
| -rw-r--r-- | buffer.c | 7 | ||||
| -rw-r--r-- | buffer.h | 2 | ||||
| -rw-r--r-- | register.c | 2 |
3 files changed, 10 insertions, 1 deletions
@@ -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; +} @@ -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 @@ -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: { |
