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