Mercurial > dovecot > original-hg > dovecot-1.2
changeset 2990:57f91991f4ca HEAD
Seeking backwards to headers wasn't working.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 19 Dec 2004 02:45:33 +0200 |
parents | 83c791a0b6d9 |
children | ca4341dbde8a |
files | src/lib-mail/istream-header-filter.c |
diffstat | 1 files changed, 10 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-mail/istream-header-filter.c Sat Dec 18 16:47:46 2004 +0200 +++ b/src/lib-mail/istream-header-filter.c Sun Dec 19 02:45:33 2004 +0200 @@ -14,6 +14,7 @@ struct istream *input; struct message_header_parser_ctx *hdr_ctx; + uoff_t start_offset; const char **headers; size_t headers_count; @@ -204,12 +205,10 @@ return -1; } - if (mstream->input->v_offset - mstream->header_size.physical_size != - stream->istream.v_offset - mstream->header_size.virtual_size) { - i_stream_seek(mstream->input, stream->istream.v_offset - - mstream->header_size.virtual_size + - mstream->header_size.physical_size); - } + i_stream_seek(mstream->input, mstream->start_offset + + stream->istream.v_offset - + mstream->header_size.virtual_size + + mstream->header_size.physical_size); stream->buffer = i_stream_get_data(mstream->input, &pos); if (pos <= stream->pos) { @@ -258,14 +257,16 @@ 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, 0); + i_stream_seek(mstream->input, mstream->start_offset); mstream->skip_count = v_offset; mstream->cur_line = 0; + mstream->parsed_lines = 0; + mstream->header_read = FALSE; } else { /* body */ v_offset += mstream->header_size.physical_size - mstream->header_size.virtual_size; - i_stream_seek(mstream->input, v_offset); + i_stream_seek(mstream->input, mstream->start_offset + v_offset); } } @@ -300,6 +301,7 @@ 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.close = _close; mstream->istream.iostream.destroy = _destroy;