From: Stephan Bosch Date: Sun, 31 Mar 2019 11:18:04 +0000 (+0200) Subject: lib: buffer - Add buffer_get_avail_size(). X-Git-Tag: 2.3.8~135 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=62f938265fd941e4f5556fcb7a0133ac57763ab0;p=thirdparty%2Fdovecot%2Fcore.git lib: buffer - Add buffer_get_avail_size(). This determines how much data can be added to buffer. --- diff --git a/src/lib/buffer.c b/src/lib/buffer.c index 18ef955176..2f84f72cdc 100644 --- a/src/lib/buffer.c +++ b/src/lib/buffer.c @@ -345,6 +345,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 7480f3128b..c8a0ea8f62 100644 --- a/src/lib/buffer.h +++ b/src/lib/buffer.h @@ -99,6 +99,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);