dovecot: Use istream_private->parent pointer globally instead of...

dovecot at dovecot.org dovecot at dovecot.org
Sat Dec 22 05:59:02 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/1a89a1509e81
changeset: 7030:1a89a1509e81
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Dec 22 04:48:33 2007 +0200
description:
Use istream_private->parent pointer globally instead of each filter stream
having its own.

diffstat:

5 files changed, 72 insertions(+), 73 deletions(-)
src/lib-mail/istream-header-filter.c          |   43 +++++++++++-----------
src/lib-storage/index/mbox/istream-raw-mbox.c |   47 ++++++++++++-------------
src/lib/istream-crlf.c                        |   29 ++++++---------
src/lib/istream-internal.h                    |    1 
src/lib/istream-limit.c                       |   25 ++++++-------

diffs (truncated from 539 to 300 lines):

diff -r 595b600ddf8b -r 1a89a1509e81 src/lib-mail/istream-header-filter.c
--- a/src/lib-mail/istream-header-filter.c	Sat Dec 22 03:52:30 2007 +0200
+++ b/src/lib-mail/istream-header-filter.c	Sat Dec 22 04:48:33 2007 +0200
@@ -12,7 +12,6 @@ struct header_filter_istream {
 	struct istream_private istream;
 	pool_t pool;
 
-	struct istream *input;
 	struct message_header_parser_ctx *hdr_ctx;
 	uoff_t start_offset;
 
@@ -45,7 +44,7 @@ static void i_stream_header_filter_destr
 
 	if (mstream->hdr_ctx != NULL)
 		message_parse_header_deinit(&mstream->hdr_ctx);
-	i_stream_unref(&mstream->input);
+	i_stream_unref(&mstream->istream.parent);
 	if (array_is_created(&mstream->match_change_lines))
 		array_free(&mstream->match_change_lines);
 	pool_unref(&mstream->pool);
@@ -59,7 +58,7 @@ i_stream_header_filter_set_max_buffer_si
 		(struct header_filter_istream *)stream;
 
 	mstream->istream.max_buffer_size = max_size;
-	i_stream_set_max_buffer_size(mstream->input, max_size);
+	i_stream_set_max_buffer_size(mstream->istream.parent, max_size);
 }
 
 static ssize_t
@@ -74,17 +73,17 @@ read_mixed(struct header_filter_istream 
 		return -1;
 	}
 
-	data = i_stream_get_data(mstream->input, &pos);
+	data = i_stream_get_data(mstream->istream.parent, &pos);
 	if (pos == body_highwater_size) {
-		ret = i_stream_read(mstream->input);
+		ret = i_stream_read(mstream->istream.parent);
 		mstream->istream.istream.stream_errno =
-			mstream->input->stream_errno;
-		mstream->istream.istream.eof = mstream->input->eof;
+			mstream->istream.parent->stream_errno;
+		mstream->istream.istream.eof = mstream->istream.parent->eof;
 
 		if (ret <= 0)
 			return ret;
 
-		data = i_stream_get_data(mstream->input, &pos);
+		data = i_stream_get_data(mstream->istream.parent, &pos);
 	}
 	i_assert(pos > body_highwater_size);
 	buffer_append(mstream->hdr_buf, data + body_highwater_size,
@@ -128,7 +127,8 @@ static ssize_t read_header(struct header
 
 	if (mstream->hdr_ctx == NULL) {
 		mstream->hdr_ctx =
-			message_parse_header_init(mstream->input, NULL, 0);
+			message_parse_header_init(mstream->istream.parent,
+						  NULL, 0);
 	}
 
 	/* remove skipped data from hdr_buf */
@@ -250,7 +250,8 @@ static ssize_t read_header(struct header
 		mstream->header_parsed = TRUE;
 		mstream->header_read = TRUE;
 
-		mstream->header_size.physical_size = mstream->input->v_offset;
+		mstream->header_size.physical_size =
+			mstream->istream.parent->v_offset;
 		mstream->header_size.virtual_size =
 			mstream->istream.istream.v_offset + pos;
 	}
@@ -287,7 +288,7 @@ static ssize_t i_stream_header_filter_re
 		return -1;
 	}
 
-	i_stream_seek(mstream->input, mstream->start_offset +
+	i_stream_seek(stream->parent, mstream->start_offset +
 		      stream->istream.v_offset -
 		      mstream->header_size.virtual_size +
 		      mstream->header_size.physical_size);
@@ -295,13 +296,13 @@ static ssize_t i_stream_header_filter_re
 	stream->pos -= stream->skip;
 	stream->skip = 0;
 
-	stream->buffer = i_stream_get_data(mstream->input, &pos);
+	stream->buffer = i_stream_get_data(stream->parent, &pos);
 	if (pos <= stream->pos) {
-		if ((ret = i_stream_read(mstream->input)) == -2)
+		if ((ret = i_stream_read(stream->parent)) == -2)
 			return -2;
-		stream->istream.stream_errno = mstream->input->stream_errno;
-		stream->istream.eof = mstream->input->eof;
-		stream->buffer = i_stream_get_data(mstream->input, &pos);
+		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;
 	}
@@ -345,7 +346,7 @@ static void i_stream_header_filter_seek(
 	if (v_offset < mstream->header_size.virtual_size) {
 		/* seek into headers. we'll have to re-parse them, use
 		   skip_count to set the wanted position */
-		i_stream_seek(mstream->input, mstream->start_offset);
+		i_stream_seek(stream->parent, mstream->start_offset);
 		mstream->skip_count = v_offset;
 		mstream->cur_line = 0;
 		mstream->header_read = FALSE;
@@ -353,7 +354,7 @@ static void i_stream_header_filter_seek(
 		/* body */
 		v_offset += mstream->header_size.physical_size -
 			mstream->header_size.virtual_size;
-		i_stream_seek(mstream->input, mstream->start_offset + v_offset);
+		i_stream_seek(stream->parent, mstream->start_offset + v_offset);
 	}
 }
 
@@ -370,7 +371,7 @@ i_stream_header_filter_stat(struct istre
 		(struct header_filter_istream *)stream;
 	const struct stat *st;
 
-	st = i_stream_stat(mstream->input, exact);
+	st = i_stream_stat(stream->parent, exact);
 	if (st == NULL || st->st_size == -1 || !exact)
 		return st;
 
@@ -400,8 +401,8 @@ i_stream_create_header_filter(struct ist
 	mstream->pool = pool_alloconly_create("header filter stream", 4096);
 	mstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
 
-	mstream->input = input;
-	i_stream_ref(mstream->input);
+	mstream->istream.parent = input;
+	i_stream_ref(mstream->istream.parent);
 
 	mstream->headers = headers_count == 0 ? NULL :
 		p_new(mstream->pool, const char *, headers_count);
diff -r 595b600ddf8b -r 1a89a1509e81 src/lib-storage/index/mbox/istream-raw-mbox.c
--- a/src/lib-storage/index/mbox/istream-raw-mbox.c	Sat Dec 22 03:52:30 2007 +0200
+++ b/src/lib-storage/index/mbox/istream-raw-mbox.c	Sat Dec 22 04:48:33 2007 +0200
@@ -13,7 +13,6 @@ struct raw_mbox_istream {
 	char *sender, *next_sender;
 
 	uoff_t from_offset, hdr_offset, body_offset, mail_size;
-	struct istream *input;
 	uoff_t input_peak_offset;
 
 	unsigned int crlf_ending:1;
@@ -28,8 +27,9 @@ static void i_stream_raw_mbox_destroy(st
 	i_free(rstream->sender);
 	i_free(rstream->next_sender);
 
-	i_stream_seek(rstream->input, rstream->istream.istream.v_offset);
-	i_stream_unref(&rstream->input);
+	i_stream_seek(rstream->istream.parent,
+		      rstream->istream.istream.v_offset);
+	i_stream_unref(&rstream->istream.parent);
 }
 
 static void
@@ -39,7 +39,7 @@ i_stream_raw_mbox_set_max_buffer_size(st
 	struct raw_mbox_istream *rstream = (struct raw_mbox_istream *)stream;
 
 	rstream->istream.max_buffer_size = max_size;
-	i_stream_set_max_buffer_size(rstream->input, max_size);
+	i_stream_set_max_buffer_size(rstream->istream.parent, max_size);
 }
 
 static int mbox_read_from_line(struct raw_mbox_istream *rstream)
@@ -50,7 +50,7 @@ static int mbox_read_from_line(struct ra
 	size_t pos, line_pos;
 	int skip;
 
-	buf = i_stream_get_data(rstream->input, &pos);
+	buf = i_stream_get_data(rstream->istream.parent, &pos);
 	i_assert(pos > 0);
 
 	/* from_offset points to "\nFrom ", so unless we're at the beginning
@@ -60,11 +60,11 @@ static int mbox_read_from_line(struct ra
 		skip++;
 
 	while ((p = memchr(buf+skip, '\n', pos-skip)) == NULL) {
-		if (i_stream_read(rstream->input) < 0) {
+		if (i_stream_read(rstream->istream.parent) < 0) {
 			/* EOF - shouldn't happen */
 			return -1;
 		}
-		buf = i_stream_get_data(rstream->input, &pos);
+		buf = i_stream_get_data(rstream->istream.parent, &pos);
 		i_assert(pos > 0);
 	}
 	line_pos = (size_t)(p - buf);
@@ -94,7 +94,7 @@ static int mbox_read_from_line(struct ra
 
 	/* we'll skip over From-line */
 	rstream->istream.istream.v_offset += line_pos+1;
-	i_stream_skip(rstream->input, line_pos+1);
+	i_stream_skip(rstream->istream.parent, line_pos+1);
 	rstream->hdr_offset = rstream->istream.istream.v_offset;
 	return 0;
 }
@@ -137,7 +137,7 @@ static ssize_t i_stream_raw_mbox_read(st
 	if (stream->istream.eof)
 		return -1;
 
-	i_stream_seek(rstream->input, stream->istream.v_offset);
+	i_stream_seek(stream->parent, stream->istream.v_offset);
 
 	stream->pos -= stream->skip;
 	stream->skip = 0;
@@ -145,7 +145,7 @@ static ssize_t i_stream_raw_mbox_read(st
 
 	ret = 0;
 	do {
-		buf = i_stream_get_data(rstream->input, &pos);
+		buf = i_stream_get_data(stream->parent, &pos);
 		if (pos > 1 && stream->istream.v_offset + pos >
 		    rstream->input_peak_offset) {
 			/* fake our read count. needed because if in the end
@@ -155,9 +155,9 @@ static ssize_t i_stream_raw_mbox_read(st
 			ret = pos;
 			break;
 		}
-		ret = i_stream_read(rstream->input);
+		ret = i_stream_read(stream->parent);
 	} while (ret > 0);
-	stream->istream.stream_errno = rstream->input->stream_errno;
+	stream->istream.stream_errno = stream->parent->stream_errno;
 
 	if (ret < 0) {
 		if (ret == -2) {
@@ -214,7 +214,7 @@ static ssize_t i_stream_raw_mbox_read(st
 
 		/* got it. we don't want to return it however,
 		   so start again from headers */
-		buf = i_stream_get_data(rstream->input, &pos);
+		buf = i_stream_get_data(stream->parent, &pos);
 		if (pos == 0)
 			return i_stream_raw_mbox_read(stream);
 	}
@@ -321,7 +321,7 @@ static void i_stream_raw_mbox_sync(struc
 {
 	struct raw_mbox_istream *rstream = (struct raw_mbox_istream *)stream;
 
-	i_stream_sync(rstream->input);
+	i_stream_sync(stream->parent);
 
 	rstream->istream.skip = 0;
 	rstream->istream.pos = 0;
@@ -330,10 +330,9 @@ static const struct stat *
 static const struct stat *
 i_stream_raw_mbox_stat(struct istream_private *stream, bool exact)
 {
-	struct raw_mbox_istream *rstream = (struct raw_mbox_istream *)stream;
 	const struct stat *st;
 
-	st = i_stream_stat(rstream->input, exact);
+	st = i_stream_stat(stream->parent, exact);
 	if (st == NULL)
 		return NULL;
 
@@ -350,17 +349,17 @@ struct istream *i_stream_create_raw_mbox
 
 	rstream = i_new(struct raw_mbox_istream, 1);
 
-	rstream->input = input;
 	rstream->body_offset = (uoff_t)-1;
 	rstream->mail_size = (uoff_t)-1;
 	rstream->received_time = (time_t)-1;
 	rstream->next_received_time = (time_t)-1;
 
-	rstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
 	rstream->istream.iostream.destroy = i_stream_raw_mbox_destroy;
 	rstream->istream.iostream.set_max_buffer_size =
 		i_stream_raw_mbox_set_max_buffer_size;
 
+	rstream->istream.parent = input;
+	rstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
 	rstream->istream.read = i_stream_raw_mbox_read;
 	rstream->istream.seek = i_stream_raw_mbox_seek;
 	rstream->istream.sync = i_stream_raw_mbox_sync;
@@ -380,7 +379,7 @@ static int istream_raw_mbox_is_valid_fro
 	char *sender;
 
 	/* minimal: "From x Thu Nov 29 22:33:52 2001" = 31 chars */
-	if (i_stream_read_data(rstream->input, &data, &size, 30) == -1)
+	if (i_stream_read_data(rstream->istream.parent, &data, &size, 30) == -1)
 		return -1;
 
 	if ((size == 1 && data[0] == '\n') ||
@@ -400,7 +399,8 @@ static int istream_raw_mbox_is_valid_fro
 	}
 
 	while (memchr(data, '\n', size) == NULL) {
-		if (i_stream_read_data(rstream->input, &data, &size, size) < 0)
+		if (i_stream_read_data(rstream->istream.parent,
+				       &data, &size, size) < 0)
 			break;
 	}


More information about the dovecot-cvs mailing list