changeset 7738:7995da69b348 HEAD

buffer_reset(buf) and buffer_set_used_size(buf, 0) now do the same thing.
author Timo Sirainen <tss@iki.fi>
date Fri, 29 Feb 2008 03:33:30 +0200
parents 1b8277a36723
children a56c676ce65d
files src/lib/buffer.c
diffstat 1 files changed, 9 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/buffer.c	Fri Feb 29 03:31:02 2008 +0200
+++ b/src/lib/buffer.c	Fri Feb 29 03:33:30 2008 +0200
@@ -47,6 +47,12 @@
 	}
 	new_size = pos + data_size;
 
+	if (new_size > buf->used && buf->used < buf->dirty) {
+		/* clear used..dirty area */
+		size_t max = I_MIN(I_MIN(buf->alloc, buf->dirty), new_size);
+
+		memset(buf->w_buffer + buf->used, 0, max - buf->used);
+	}
 	if (new_size > buf->alloc) {
 		if (unlikely(!buf->dynamic)) {
 			i_panic("Buffer full (%"PRIuSIZE_T" > %"PRIuSIZE_T", "
@@ -142,13 +148,9 @@
 	return buf->pool;
 }
 
-void buffer_reset(buffer_t *_buf)
+void buffer_reset(buffer_t *buf)
 {
-	struct real_buffer *buf = (struct real_buffer *)_buf;
-
-	memset(buf->w_buffer, 0, I_MAX(buf->used, buf->dirty));
-	buf->dirty = 0;
-	buf->used = 0;
+	buffer_set_used_size(buf, 0);
 }
 
 void buffer_write(buffer_t *_buf, size_t pos,
@@ -287,7 +289,7 @@
 
 	i_assert(used_size <= buf->alloc);
 
-	if (used_size < buf->used && buf->used > buf->dirty)
+	if (buf->used > buf->dirty)
 		buf->dirty = buf->used;
 
 	buf->used = used_size;