Mercurial > dovecot > original-hg > dovecot-1.2
changeset 414:c9293b1f721b HEAD
bugfixes
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 14 Oct 2002 04:06:24 +0300 |
parents | 0957ac190eaf |
children | bd30c10f2864 |
files | src/lib/ibuffer-mmap.c src/lib/ibuffer.c |
diffstat | 2 files changed, 12 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/ibuffer-mmap.c Mon Oct 14 03:38:52 2002 +0300 +++ b/src/lib/ibuffer-mmap.c Mon Oct 14 04:06:24 2002 +0300 @@ -177,17 +177,17 @@ uoff_t abs_offset; abs_offset = buf->ibuffer.start_offset + v_offset; - if (mbuf->mmap_offset >= abs_offset && - mbuf->mmap_offset + buf->pos < abs_offset) { + if (mbuf->mmap_offset <= abs_offset && + mbuf->mmap_offset + buf->pos > abs_offset) { /* already mmaped */ - buf->skip = mbuf->mmap_offset - abs_offset; - buf->pos = buf->buffer_size; + buf->skip = abs_offset - mbuf->mmap_offset; } else { /* force reading next time */ i_buffer_munmap(mbuf); - buf->skip = buf->pos = 0; + buf->skip = buf->pos = abs_offset; } + buf->ibuffer.v_offset = v_offset; return 1; }
--- a/src/lib/ibuffer.c Mon Oct 14 03:38:52 2002 +0300 +++ b/src/lib/ibuffer.c Mon Oct 14 04:06:24 2002 +0300 @@ -128,7 +128,7 @@ return -1; data_size = _buf->pos - _buf->skip; - _buf->skip = _buf->pos = 0; + _buf->skip = _buf->pos; count -= data_size; buf->v_offset += data_size; @@ -219,21 +219,19 @@ size_t *size, size_t threshold) { _IBuffer *_buf = buf->real_buffer; - ssize_t ret; + ssize_t ret = 0; while (_buf->pos - _buf->skip <= threshold) { /* we need more data */ ret = _buf->read(_buf); - if (ret < 0) { - if (ret == -2) - return -2; - else - break; - } + if (ret < 0) + break; } *data = i_buffer_get_data(buf, size); - return *size > threshold ? 1 : *size > 0 ? 0 : -1; + return *size > threshold ? 1 : + ret == -2 ? -2 : + *size > 0 ? 0 : -1; } IBuffer *_i_buffer_create(_IBuffer *_buf, Pool pool, int fd,