dovecot: buffer_reset(buf) and buffer_set_used_size(buf, 0) now ...

dovecot at dovecot.org dovecot at dovecot.org
Fri Feb 29 03:30:42 EET 2008


details:   http://hg.dovecot.org/dovecot/rev/7995da69b348
changeset: 7298:7995da69b348
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Feb 29 03:33:30 2008 +0200
description:
buffer_reset(buf) and buffer_set_used_size(buf, 0) now do the same thing.

diffstat:

1 file changed, 10 insertions(+), 8 deletions(-)
src/lib/buffer.c |   18 ++++++++++--------

diffs (42 lines):

diff -r 1b8277a36723 -r 7995da69b348 src/lib/buffer.c
--- 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 @@ buffer_check_limits(struct real_buffer *
 	}
 	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 @@ pool_t buffer_get_pool(buffer_t *_buf)
 	return buf->pool;
 }
 
-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;
+void buffer_reset(buffer_t *buf)
+{
+	buffer_set_used_size(buf, 0);
 }
 
 void buffer_write(buffer_t *_buf, size_t pos,
@@ -287,7 +289,7 @@ void buffer_set_used_size(buffer_t *_buf
 
 	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;


More information about the dovecot-cvs mailing list