]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: ostream-buffer - Revert returning 0 as used buffer size
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 14 Sep 2020 07:28:41 +0000 (10:28 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 14 Sep 2020 09:22:42 +0000 (12:22 +0300)
This change broke at least one external plugin that assumed the original
behavior. Safer to just revert this change.

Reverts 48083d9e7fdbe257b0be33043ecf0ca87489eef9

src/lib/ostream-buffer.c
src/lib/test-ostream-buffer.c

index 0beb20ae8f02bc23df6a0ec1bf037289d439f387..1a0a16f95e9df902d60ce63549e2c2108afc7f91 100644 (file)
@@ -54,13 +54,11 @@ o_stream_buffer_sendv(struct ostream_private *stream,
 }
 
 static size_t
-o_stream_buffer_get_buffer_used_size(const struct ostream_private *stream ATTR_UNUSED)
+o_stream_buffer_get_buffer_used_size(const struct ostream_private *stream)
 {
-       /* Don't treat the destination buffer as the ostream buffer size.
-          Otherwise ostream-buffer can't be used in a normal way in some
-          places that stop sending more data to it if the buffer size grows
-          beyond IO_BLOCK_SIZE. */
-       return 0;
+       struct buffer_ostream *bstream = (struct buffer_ostream *)stream;
+
+       return bstream->buf->used;
 }
 
 struct ostream *o_stream_create_buffer(buffer_t *buf)
index 4df8d6a0d834c64d9199db03a4d2686f94ae8a62..42c792f63da7b0816372fac58aa44d1105a0e669 100644 (file)
@@ -66,34 +66,32 @@ static void test_ostream_buffer_size(void)
 
        test_begin("ostream buffer size/available");
        output = o_stream_create_buffer(str);
-       test_assert(str_len(str) == 0);
+       test_assert(o_stream_get_buffer_used_size(output) == 0);
        test_assert(o_stream_get_buffer_avail_size(output) == (size_t)-1);
 
        /* test shrinking sink's max buffer size */
        o_stream_set_max_buffer_size(output, 10);
-       test_assert(str_len(str) == 0);
+       test_assert(o_stream_get_buffer_used_size(output) == 0);
        test_assert(o_stream_get_buffer_avail_size(output) == 10);
 
        /* partial send */
        const char *partial_input = "01234567890123456789";
        ssize_t ret = o_stream_send_str(output, partial_input);
        test_assert(ret == 10);
-       test_assert(str_len(str) == 10);
-       test_assert(o_stream_get_buffer_avail_size(output) == 10);
+       test_assert(o_stream_get_buffer_used_size(output) == 10);
+       test_assert(o_stream_get_buffer_avail_size(output) == 0);
        
        /* increase max buffer size so that it can hold the whole message */
        o_stream_set_max_buffer_size(output, 100);
-       test_assert(str_len(str) == 10);
-       test_assert(o_stream_get_buffer_avail_size(output) == 100);
+       test_assert(o_stream_get_buffer_used_size(output) == 10);
+       test_assert(o_stream_get_buffer_avail_size(output) == 90);
 
        /* send the rest */
        ret += o_stream_send_str(output, partial_input + ret);
        test_assert(ret == (ssize_t)strlen(partial_input));
        test_assert(output->offset == str_len(str));
-       test_assert(str_len(str) == 20);
-
-       /* used size is always 0 */
-       test_assert(o_stream_get_buffer_used_size(output) == 0);
+       test_assert(o_stream_get_buffer_used_size(output) == 20);
+       test_assert(o_stream_get_buffer_avail_size(output) == 80);
 
        /* check buffered data */
        test_assert(strcmp(str_c(str), partial_input) == 0);