Mercurial > dovecot > original-hg > dovecot-1.2
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;