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,