aboutsummaryrefslogtreecommitdiff
path: root/buffer.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2016-12-20 18:59:44 +0100
committerMarc André Tanner <mat@brain-dump.org>2016-12-20 18:59:44 +0100
commitc61b642318cd428b188ffb82ec90a7d912423067 (patch)
tree80ffbc682ce5d6768a66767e22dc75eb9639b3ed /buffer.c
parent804741d4f869552981345bcdc0fd2cf4f472b899 (diff)
downloadvis-c61b642318cd428b188ffb82ec90a7d912423067.tar.gz
vis-c61b642318cd428b188ffb82ec90a7d912423067.tar.xz
buffer: fix error case in buffer_append0
Do not change buffer length when failing to append.
Diffstat (limited to 'buffer.c')
-rw-r--r--buffer.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/buffer.c b/buffer.c
index f483d53..8794e20 100644
--- a/buffer.c
+++ b/buffer.c
@@ -93,9 +93,12 @@ bool buffer_append(Buffer *buf, const void *data, size_t len) {
}
bool buffer_append0(Buffer *buf, const char *data) {
- if (buf->len > 0 && buf->data[buf->len-1] == '\0')
- buf->len--;
- return buffer_append(buf, data, strlen(data)) && buffer_append(buf, "\0", 1);
+ size_t nul = (buf->len > 0 && buf->data[buf->len-1] == '\0') ? 1 : 0;
+ buf->len -= nul;
+ bool ret = buffer_append(buf, data, strlen(data)+1);
+ if (!ret)
+ buf->len += nul;
+ return ret;
}
bool buffer_prepend(Buffer *buf, const void *data, size_t len) {