From: Timo Sirainen Date: Mon, 10 Nov 2003 21:36:13 +0000 (+0200) Subject: fixes X-Git-Tag: 1.1.alpha1~4232 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=601f5f14c6cde28f0e0c6ca7c5d735315d3d48df;p=thirdparty%2Fdovecot%2Fcore.git fixes --HG-- branch : HEAD --- diff --git a/src/lib/istream-limit.c b/src/lib/istream-limit.c index dd4bc75226..27046bd8b0 100644 --- a/src/lib/istream-limit.c +++ b/src/lib/istream-limit.c @@ -47,17 +47,19 @@ static ssize_t _read(struct _istream *stream) ssize_t ret; size_t pos; - if (stream->istream.v_offset >= lstream->v_size) + if (stream->istream.v_offset + + (stream->pos - stream->skip) >= lstream->v_size) return -1; if (lstream->input->v_offset != lstream->v_start_offset + stream->istream.v_offset) { i_stream_seek(lstream->input, - lstream->v_start_offset + stream->istream.v_offset); + lstream->v_start_offset + + stream->istream.v_offset); } if (i_stream_read(lstream->input) == -2 && stream->buffer != NULL) { - if (lstream->istream.skip == 0) + if (stream->skip == 0) return -2; stream->istream.eof = lstream->input->eof; } @@ -70,9 +72,9 @@ static ssize_t _read(struct _istream *stream) if (pos > left) pos = left; - ret = pos <= lstream->istream.pos ? -1 : + ret = pos <= stream->pos ? -1 : (ssize_t) (pos - stream->pos); - lstream->istream.pos = pos; + stream->pos = pos; return ret; } diff --git a/src/lib/istream.c b/src/lib/istream.c index ecaabbea58..c9a1e98d97 100644 --- a/src/lib/istream.c +++ b/src/lib/istream.c @@ -78,11 +78,15 @@ void i_stream_seek(struct istream *stream, uoff_t v_offset) { struct _istream *_stream = stream->real_stream; + if (v_offset > stream->v_offset) { + i_stream_skip(stream, v_offset - stream->v_offset); + return; + } + if (stream->closed) return; - if (v_offset < stream->v_offset) - stream->eof = FALSE; + stream->eof = FALSE; _stream->seek(_stream, v_offset); }