Mercurial > dovecot > original-hg > dovecot-1.2
changeset 2756:9cd5d91509bb HEAD
Growing output buffer size broke the data inside it.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 16 Oct 2004 19:32:09 +0300 |
parents | 13c70c53cb55 |
children | b0e039ad5717 |
files | src/lib/ostream-file.c |
diffstat | 1 files changed, 6 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/ostream-file.c Sat Oct 16 17:59:32 2004 +0300 +++ b/src/lib/ostream-file.c Sat Oct 16 19:32:09 2004 +0300 @@ -296,7 +296,7 @@ static void o_stream_grow_buffer(struct file_ostream *fstream, size_t bytes) { - size_t size, head_size, new_size; + size_t size, new_size, end_size; size = nearest_power(fstream->buffer_size + bytes); if (size > fstream->max_buffer_size) { @@ -318,17 +318,11 @@ fstream->buffer_size, size); if (fstream->tail <= fstream->head && !IS_STREAM_EMPTY(fstream)) { - head_size = I_MIN(fstream->head, size - fstream->buffer_size); - memcpy(fstream->buffer + fstream->buffer_size, fstream->buffer, - head_size); - - if (head_size == fstream->head) - fstream->tail = fstream->buffer_size + head_size; - else { - memmove(fstream->buffer, fstream->buffer + head_size, - fstream->head - head_size); - fstream->tail = fstream->head - head_size; - } + /* move head forward to end of buffer */ + end_size = fstream->buffer_size - fstream->head; + memmove(fstream->buffer + size - end_size, + fstream->buffer + fstream->head, end_size); + fstream->head = size - end_size; } fstream->full = FALSE;