Mercurial > dovecot > core-2.2
changeset 12416:eb08ed7c6a7b
stream-base64-encoder: Added support for seeking backwards in stream.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 15 Nov 2010 15:31:26 +0000 |
parents | 236ed6d5b391 |
children | 967de059f94d |
files | src/lib/istream-base64-encoder.c |
diffstat | 1 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/istream-base64-encoder.c Mon Nov 15 15:31:02 2010 +0000 +++ b/src/lib/istream-base64-encoder.c Mon Nov 15 15:31:26 2010 +0000 @@ -128,6 +128,24 @@ return i_stream_stat(stream->parent, exact); } +static void +i_stream_base64_encoder_seek(struct istream_private *stream, + uoff_t v_offset, bool mark) +{ + struct base64_encoder_istream *bstream = + (struct base64_encoder_istream *)stream; + + if (v_offset < stream->istream.v_offset) { + /* seeking backwards - go back to beginning and seek + forward from there. */ + stream->parent_expected_offset = stream->parent_start_offset; + stream->skip = stream->pos = 0; + stream->istream.v_offset = 0; + bstream->cur_line_len = 0; + } + i_stream_default_seek(stream, v_offset, mark); +} + struct istream * i_stream_create_base64_encoder(struct istream *input, unsigned int chars_per_line, bool crlf) @@ -144,6 +162,7 @@ bstream->istream.parent = input; bstream->istream.read = i_stream_base64_encoder_read; bstream->istream.stat = i_stream_base64_encoder_stat; + bstream->istream.seek = i_stream_base64_encoder_seek; bstream->istream.istream.readable_fd = FALSE; bstream->istream.istream.blocking = input->blocking;