changeset 2165:4c5732a9e2bc HEAD

i_stream_read_data(): don't call read() unless we have to
author Timo Sirainen <tss@iki.fi>
date Sat, 19 Jun 2004 03:59:31 +0300
parents e5f9d66d6ced
children ed6b3d59ce93
files src/lib/istream.c
diffstat 1 files changed, 7 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/istream.c	Sat Jun 19 03:19:48 2004 +0300
+++ b/src/lib/istream.c	Sat Jun 19 03:59:31 2004 +0300
@@ -179,19 +179,18 @@
 int i_stream_read_data(struct istream *stream, const unsigned char **data,
 		       size_t *size, size_t threshold)
 {
-	struct _istream *_stream = stream->real_stream;
 	ssize_t ret = 0;
 
-	while (_stream->pos - _stream->skip <= threshold) {
+	do {
+		*data = i_stream_get_data(stream, size);
+		if (*size > threshold)
+			return 1;
+
 		/* we need more data */
 		ret = i_stream_read(stream);
-		if (ret < 0)
-			break;
-	}
+	} while (ret >= 0);
 
-	*data = i_stream_get_data(stream, size);
-	return *size > threshold ? 1 :
-		ret == -2 ? -2 :
+	return ret == -2 ? -2 :
 		*size > 0 ? 0 : -1;
 }