From a284af94d449046116e8c40d1adfac6091a6ffb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Mon, 20 Feb 2017 13:32:13 +0100 Subject: buffer: add buffer_grow --- buffer.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'buffer.c') diff --git a/buffer.c b/buffer.c index ca63265..a3403fd 100644 --- a/buffer.c +++ b/buffer.c @@ -29,6 +29,13 @@ bool buffer_reserve(Buffer *buf, size_t size) { return true; } +bool buffer_grow(Buffer *buf, size_t len) { + size_t size; + if (!addu(buf->len, len, &size)) + return false; + return buffer_reserve(buf, size); +} + bool buffer_terminate(Buffer *buf) { return !buf->data || buf->len == 0 || buf->data[buf->len-1] == '\0' || buffer_append(buf, "\0", 1); @@ -72,7 +79,7 @@ bool buffer_insert(Buffer *buf, size_t pos, const void *data, size_t len) { return false; if (len == 0) return true; - if (!buffer_reserve(buf, buf->len + len)) + if (!buffer_grow(buf, len)) return false; size_t move = buf->len - pos; if (move > 0) @@ -115,7 +122,7 @@ static bool buffer_vappendf(Buffer *buf, const char *fmt, va_list ap) { va_list ap_save; va_copy(ap_save, ap); int len = vsnprintf(NULL, 0, fmt, ap); - if (len == -1 || !buffer_reserve(buf, buf->len+len+1)) { + if (len == -1 || !buffer_grow(buf, len+1)) { va_end(ap_save); return false; } -- cgit v1.2.3