Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7032:85cf52f0bc64 HEAD
i_stream_create() now takes parent stream as parameter and internally sets
abs_start_offset correctly. Added parent_start_offset which is used by
filters instead of their own internal start_offset.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 22 Dec 2007 05:15:51 +0200 |
parents | 4b51ee73ed51 |
children | 5b40343e96c7 |
files | src/lib-mail/istream-header-filter.c src/lib-storage/index/mbox/istream-raw-mbox.c src/lib/istream-concat.c src/lib/istream-crlf.c src/lib/istream-data.c src/lib/istream-file.c src/lib/istream-internal.h src/lib/istream-limit.c src/lib/istream-mmap.c src/lib/istream-seekable.c src/lib/istream-tee.c src/lib/istream.c src/plugins/zlib/istream-zlib.c |
diffstat | 13 files changed, 39 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/istream-header-filter.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib-mail/istream-header-filter.c Sat Dec 22 05:15:51 2007 +0200 @@ -13,7 +13,6 @@ pool_t pool; struct message_header_parser_ctx *hdr_ctx; - uoff_t start_offset; const char **headers; unsigned int headers_count; @@ -288,7 +287,7 @@ return -1; } - i_stream_seek(stream->parent, mstream->start_offset + + i_stream_seek(stream->parent, mstream->istream.parent_start_offset + stream->istream.v_offset - mstream->header_size.virtual_size + mstream->header_size.physical_size); @@ -346,7 +345,7 @@ 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(stream->parent, mstream->start_offset); + i_stream_seek(stream->parent, stream->parent_start_offset); mstream->skip_count = v_offset; mstream->cur_line = 0; mstream->header_read = FALSE; @@ -354,7 +353,8 @@ /* body */ v_offset += mstream->header_size.physical_size - mstream->header_size.virtual_size; - i_stream_seek(stream->parent, mstream->start_offset + v_offset); + i_stream_seek(stream->parent, + stream->parent_start_offset + v_offset); } } @@ -401,9 +401,6 @@ mstream->pool = pool_alloconly_create("header filter stream", 4096); mstream->istream.max_buffer_size = input->real_stream->max_buffer_size; - mstream->istream.parent = input; - i_stream_ref(mstream->istream.parent); - mstream->headers = headers_count == 0 ? NULL : p_new(mstream->pool, const char *, headers_count); for (i = 0; i < headers_count; i++) @@ -416,7 +413,6 @@ mstream->exclude = (flags & HEADER_FILTER_EXCLUDE) != 0; mstream->crlf = (flags & HEADER_FILTER_NO_CR) == 0; mstream->hide_body = (flags & HEADER_FILTER_HIDE_BODY) != 0; - mstream->start_offset = input->v_offset; mstream->istream.iostream.destroy = i_stream_header_filter_destroy; mstream->istream.iostream.set_max_buffer_size = @@ -429,5 +425,7 @@ mstream->istream.istream.blocking = input->blocking; mstream->istream.istream.seekable = input->seekable; - return i_stream_create(&mstream->istream, -1, 0); + + i_stream_ref(input); + return i_stream_create(&mstream->istream, input, -1); }
--- a/src/lib-storage/index/mbox/istream-raw-mbox.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib-storage/index/mbox/istream-raw-mbox.c Sat Dec 22 05:15:51 2007 +0200 @@ -345,7 +345,7 @@ { struct raw_mbox_istream *rstream; - i_stream_ref(input); + i_assert(input->v_offset == 0); rstream = i_new(struct raw_mbox_istream, 1); @@ -358,7 +358,6 @@ 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; @@ -367,8 +366,9 @@ rstream->istream.istream.blocking = input->blocking; rstream->istream.istream.seekable = input->seekable; - return i_stream_create(&rstream->istream, -1, - input->real_stream->abs_start_offset); + + i_stream_ref(input); + return i_stream_create(&rstream->istream, input, -1); } static int istream_raw_mbox_is_valid_from(struct raw_mbox_istream *rstream)
--- a/src/lib/istream-concat.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-concat.c Sat Dec 22 05:15:51 2007 +0200 @@ -271,5 +271,5 @@ cstream->istream.istream.blocking = blocking; cstream->istream.istream.seekable = seekable; - return i_stream_create(&cstream->istream, -1, 0); + return i_stream_create(&cstream->istream, NULL, -1); }
--- a/src/lib/istream-crlf.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-crlf.c Sat Dec 22 05:15:51 2007 +0200 @@ -178,7 +178,6 @@ cstream->istream.iostream.set_max_buffer_size = i_stream_crlf_set_max_buffer_size; - cstream->istream.parent = input; cstream->istream.read = crlf ? i_stream_crlf_read_crlf : i_stream_crlf_read_lf; cstream->istream.seek = i_stream_crlf_seek; @@ -186,7 +185,8 @@ cstream->istream.istream.blocking = input->blocking; cstream->istream.istream.seekable = input->seekable; - return i_stream_create(&cstream->istream, i_stream_get_fd(input), 0); + return i_stream_create(&cstream->istream, input, + i_stream_get_fd(input)); } struct istream *i_stream_create_crlf(struct istream *input)
--- a/src/lib/istream-data.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-data.c Sat Dec 22 05:15:51 2007 +0200 @@ -29,7 +29,7 @@ stream->istream.blocking = TRUE; stream->istream.seekable = TRUE; - (void)i_stream_create(stream, -1, 0); + (void)i_stream_create(stream, NULL, -1); stream->statbuf.st_size = size; return &stream->istream; }
--- a/src/lib/istream-file.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-file.c Sat Dec 22 05:15:51 2007 +0200 @@ -166,5 +166,5 @@ fstream->istream.istream.seekable = TRUE; } - return i_stream_create(&fstream->istream, fd, 0); + return i_stream_create(&fstream->istream, NULL, fd); }
--- a/src/lib/istream-internal.h Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-internal.h Sat Dec 22 05:15:51 2007 +0200 @@ -31,12 +31,13 @@ size_t skip, pos; struct istream *parent; /* for filter streams */ + uoff_t parent_start_offset; + string_t *line_str; /* for i_stream_next_line() if w_buffer == NULL */ }; struct istream * -i_stream_create(struct istream_private *stream, - int fd, uoff_t abs_start_offset); +i_stream_create(struct istream_private *stream, struct istream *parent, int fd); void i_stream_compress(struct istream_private *stream); void i_stream_grow_buffer(struct istream_private *stream, size_t bytes);
--- a/src/lib/istream-limit.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-limit.c Sat Dec 22 05:15:51 2007 +0200 @@ -6,7 +6,7 @@ struct limit_istream { struct istream_private istream; - uoff_t v_start_offset, v_size; + uoff_t v_size; }; static void i_stream_limit_destroy(struct iostream_private *stream) @@ -14,7 +14,8 @@ struct limit_istream *lstream = (struct limit_istream *) stream; /* get to same position in parent stream */ - i_stream_seek(lstream->istream.parent, lstream->v_start_offset + + i_stream_seek(lstream->istream.parent, + lstream->istream.parent_start_offset + lstream->istream.istream.v_offset); i_stream_unref(&lstream->istream.parent); } @@ -43,9 +44,9 @@ } if (stream->parent->v_offset != - lstream->v_start_offset + stream->istream.v_offset) { + lstream->istream.parent_start_offset + stream->istream.v_offset) { i_stream_seek(stream->parent, - lstream->v_start_offset + + lstream->istream.parent_start_offset + stream->istream.v_offset); } @@ -113,7 +114,6 @@ i_stream_ref(input); lstream = i_new(struct limit_istream, 1); - lstream->v_start_offset = input->v_offset; lstream->v_size = v_size; lstream->istream.max_buffer_size = input->real_stream->max_buffer_size; @@ -128,7 +128,6 @@ lstream->istream.istream.blocking = input->blocking; lstream->istream.istream.seekable = input->seekable; - return i_stream_create(&lstream->istream, i_stream_get_fd(input), - input->real_stream->abs_start_offset + - input->v_offset); + return i_stream_create(&lstream->istream, input, + i_stream_get_fd(input)); }
--- a/src/lib/istream-mmap.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-mmap.c Sat Dec 22 05:15:51 2007 +0200 @@ -220,7 +220,8 @@ mstream->istream.sync = i_stream_mmap_sync; mstream->istream.stat = i_stream_mmap_stat; - istream = i_stream_create(&mstream->istream, fd, start_offset); + mstream->istream.abs_start_offset = start_offset; + istream = i_stream_create(&mstream->istream, NULL, fd); istream->mmaped = TRUE; istream->blocking = TRUE; istream->seekable = TRUE;
--- a/src/lib/istream-seekable.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-seekable.c Sat Dec 22 05:15:51 2007 +0200 @@ -347,5 +347,5 @@ sstream->istream.istream.blocking = blocking; sstream->istream.istream.seekable = TRUE; - return i_stream_create(&sstream->istream, -1, 0); + return i_stream_create(&sstream->istream, NULL, -1); }
--- a/src/lib/istream-tee.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream-tee.c Sat Dec 22 05:15:51 2007 +0200 @@ -206,6 +206,6 @@ tstream->next = tee->children; tee->children = tstream; - return i_stream_create(&tstream->istream, - i_stream_get_fd(tee->input), 0); + return i_stream_create(&tstream->istream, NULL, + i_stream_get_fd(tee->input)); }
--- a/src/lib/istream.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/lib/istream.c Sat Dec 22 05:15:51 2007 +0200 @@ -341,11 +341,15 @@ } struct istream * -i_stream_create(struct istream_private *_stream, - int fd, uoff_t abs_start_offset) +i_stream_create(struct istream_private *_stream, struct istream *parent, int fd) { _stream->fd = fd; - _stream->abs_start_offset = abs_start_offset; + if (parent != NULL) { + _stream->parent = parent; + _stream->parent_start_offset = parent->v_offset; + _stream->abs_start_offset = parent->v_offset + + parent->real_stream->abs_start_offset; + } _stream->istream.real_stream = _stream; if (_stream->stat == NULL)
--- a/src/plugins/zlib/istream-zlib.c Sat Dec 22 05:04:46 2007 +0200 +++ b/src/plugins/zlib/istream-zlib.c Sat Dec 22 05:15:51 2007 +0200 @@ -220,5 +220,5 @@ zstream->istream.istream.seekable = TRUE; } - return i_stream_create(&zstream->istream, fd, 0); + return i_stream_create(&zstream->istream, NULL, fd); }