From a3a3765f4663eb8613c4da41de4cc33da11cf9e5 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sun, 31 Mar 2019 13:18:04 +0200 Subject: [PATCH] lib: buffer - Add buffer_get_avail_size(). This determines how much data can be added to buffer. --- src/lib/buffer.c | 8 ++++++++ src/lib/buffer.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/lib/buffer.c b/src/lib/buffer.c index 92bd4a1c55..f1883edb16 100644 --- a/src/lib/buffer.c +++ b/src/lib/buffer.c @@ -379,6 +379,14 @@ size_t buffer_get_writable_size(const buffer_t *_buf) return buf->alloc-1; } +size_t buffer_get_avail_size(const buffer_t *_buf) +{ + const struct real_buffer *buf = (const struct real_buffer *)_buf; + + i_assert(buf->alloc >= buf->used); + return ((buf->dynamic ? SIZE_MAX : buf->alloc) - buf->used); +} + bool buffer_cmp(const buffer_t *buf1, const buffer_t *buf2) { if (buf1->used != buf2->used) diff --git a/src/lib/buffer.h b/src/lib/buffer.h index 0c92e477a0..70b5ea7101 100644 --- a/src/lib/buffer.h +++ b/src/lib/buffer.h @@ -107,6 +107,9 @@ size_t buffer_get_size(const buffer_t *buf) ATTR_PURE; With dynamic buffers this is buffer_get_size()-1, because the extra 1 byte is reserved for str_c()'s NUL. */ size_t buffer_get_writable_size(const buffer_t *buf) ATTR_PURE; +/* Returns the maximum number of bytes we can append to the buffer. If the + buffer is dynamic, this is always near SIZE_MAX. */ +size_t buffer_get_avail_size(const buffer_t *buf) ATTR_PURE; /* Returns TRUE if buffer contents are identical. */ bool buffer_cmp(const buffer_t *buf1, const buffer_t *buf2); -- 2.47.3