]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: buffer - Add buffer_get_avail_size().
authorStephan Bosch <stephan.bosch@dovecot.fi>
Sun, 31 Mar 2019 11:18:04 +0000 (13:18 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Tue, 10 Sep 2019 07:02:25 +0000 (10:02 +0300)
This determines how much data can be added to buffer.

src/lib/buffer.c
src/lib/buffer.h

index 18ef9551763465030ca5f7e06caa6ec28ca293d6..2f84f72cdcf08af054bbd6f897b3994c24cd0a9f 100644 (file)
@@ -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)
index 7480f3128b92364c69eab66966307b17e842c8a9..c8a0ea8f622fea2af85b954fa9d634354c203652 100644 (file)
@@ -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);