diff src/lib-mail/istream-header-filter.c @ 9006:06bd1266f0c7 HEAD

istreams: Fixed some parent stream seeking issues.
author Timo Sirainen <tss@iki.fi>
date Fri, 01 May 2009 14:50:08 -0400
parents b9faf4db2a9f
children b1a27ed69e60
line wrap: on
line diff
--- a/src/lib-mail/istream-header-filter.c	Fri May 01 14:49:08 2009 -0400
+++ b/src/lib-mail/istream-header-filter.c	Fri May 01 14:50:08 2009 -0400
@@ -295,7 +295,6 @@
 	struct header_filter_istream *mstream =
 		(struct header_filter_istream *)stream;
 	ssize_t ret;
-	size_t pos;
 
 	if (!mstream->header_read ||
 	    stream->istream.v_offset < mstream->header_size.virtual_size) {
@@ -313,27 +312,7 @@
 		      stream->istream.v_offset -
 		      mstream->header_size.virtual_size +
 		      mstream->header_size.physical_size);
-
-	stream->pos -= stream->skip;
-	stream->skip = 0;
-
-	stream->buffer = i_stream_get_data(stream->parent, &pos);
-	if (pos <= stream->pos) {
-		if ((ret = i_stream_read(stream->parent)) == -2) {
-			i_assert(stream->skip != stream->pos);
-			return -2;
-		}
-		stream->istream.stream_errno = stream->parent->stream_errno;
-		stream->istream.eof = stream->parent->eof;
-		stream->buffer = i_stream_get_data(stream->parent, &pos);
-	} else {
-		ret = 0;
-	}
-
-	ret = pos > stream->pos ? (ssize_t)(pos - stream->pos) :
-		(ret == 0 ? 0 : -1);
-	stream->pos = pos;
-	return ret;
+	return i_stream_read_copy_from_parent(&stream->istream);
 }
 
 static void parse_header(struct header_filter_istream *mstream)