[dovecot-cvs] dovecot/src/lib istream.c,1.16,1.17

cras at procontrol.fi cras at procontrol.fi
Sat Jun 19 03:59:33 EEST 2004


Update of /home/cvs/dovecot/src/lib
In directory talvi:/tmp/cvs-serv11481

Modified Files:
	istream.c 
Log Message:
i_stream_read_data(): don't call read() unless we have to



Index: istream.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/istream.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- istream.c	18 Jun 2004 00:32:25 -0000	1.16
+++ istream.c	19 Jun 2004 00:59:31 -0000	1.17
@@ -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;
 }
 



More information about the dovecot-cvs mailing list