]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
i_stream_read_data(): don't call read() unless we have to
authorTimo Sirainen <tss@iki.fi>
Sat, 19 Jun 2004 00:59:31 +0000 (03:59 +0300)
committerTimo Sirainen <tss@iki.fi>
Sat, 19 Jun 2004 00:59:31 +0000 (03:59 +0300)
--HG--
branch : HEAD

src/lib/istream.c

index 23feaed0521b14e97920de02de50c956d4ef12ca..aced7bbc8beb1c978d8c3e66bfa05de6b04f9687 100644 (file)
@@ -179,19 +179,18 @@ unsigned char *i_stream_get_modifyable_data(struct istream *stream,
 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;
 }