Mercurial > dovecot > original-hg > dovecot-1.2
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; }