changeset 21059:3ec42e5d917e

lib: Updated buffer_set_used_size() comment and added unit test.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 16 May 2016 13:19:50 +0300
parents 16a74bf21d94
children 550a79f2a361
files src/lib/buffer.h src/lib/test-buffer.c
diffstat 2 files changed, 27 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/buffer.h	Thu Oct 27 16:19:52 2016 +0300
+++ b/src/lib/buffer.h	Mon May 16 13:19:50 2016 +0300
@@ -86,7 +86,9 @@
 	ATTR_NULL(2);
 
 /* Set the "used size" of buffer, ie. 0 would set the buffer empty.
-   Must not be used to grow buffer. */
+   Must not be used to grow buffer. The data after the buffer's new size will
+   be effectively lost, because e.g. buffer_get_space_unsafe() will zero out
+   the contents. */
 void buffer_set_used_size(buffer_t *buf, size_t used_size);
 
 /* Returns the current buffer size. */
--- a/src/lib/test-buffer.c	Thu Oct 27 16:19:52 2016 +0300
+++ b/src/lib/test-buffer.c	Mon May 16 13:19:50 2016 +0300
@@ -3,8 +3,7 @@
 #include "test-lib.h"
 #include "buffer.h"
 
-
-void test_buffer(void)
+static void test_buffer_random(void)
 {
 #define BUF_TEST_SIZE (1024*2)
 #define BUF_TEST_COUNT 1000
@@ -131,3 +130,26 @@
 	}
 	buffer_free(&buf);
 }
+
+static void test_buffer_set_used_size(void)
+{
+	buffer_t *buf;
+
+	test_begin("buffer_set_used_size");
+	buf = buffer_create_dynamic(pool_datastack_create(), 8);
+	memset(buffer_append_space_unsafe(buf, 7), 'a', 7);
+	buffer_set_used_size(buf, 4);
+	test_assert(memcmp(buffer_get_space_unsafe(buf, 0, 7), "aaaa\0\0\0", 7) == 0);
+	memset(buffer_get_space_unsafe(buf, 4, 7), 'b', 7);
+	buffer_set_used_size(buf, 10);
+	test_assert(memcmp(buffer_append_space_unsafe(buf, 1), "\0", 1) == 0);
+	buffer_set_used_size(buf, 11);
+	test_assert(memcmp(buffer_get_space_unsafe(buf, 0, 11), "aaaabbbbbb\0", 11) == 0);
+	test_end();
+}
+
+void test_buffer(void)
+{
+	test_buffer_random();
+	test_buffer_set_used_size();
+}