dovecot: i_stream_create() now takes parent stream as parameter ...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Dec 22 05:59:02 EET 2007
details: http://hg.dovecot.org/dovecot/rev/85cf52f0bc64
changeset: 7032:85cf52f0bc64
user: Timo Sirainen <tss at iki.fi>
date: Sat Dec 22 05:15:51 2007 +0200
description:
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.
diffstat:
13 files changed, 44 insertions(+), 41 deletions(-)
src/lib-mail/istream-header-filter.c | 18 ++++++++----------
src/lib-storage/index/mbox/istream-raw-mbox.c | 8 ++++----
src/lib/istream-concat.c | 4 ++--
src/lib/istream-crlf.c | 4 ++--
src/lib/istream-data.c | 2 +-
src/lib/istream-file.c | 2 +-
src/lib/istream-internal.h | 5 +++--
src/lib/istream-limit.c | 15 +++++++--------
src/lib/istream-mmap.c | 3 ++-
src/lib/istream-seekable.c | 4 ++--
src/lib/istream-tee.c | 6 +++---
src/lib/istream.c | 10 +++++++---
src/plugins/zlib/istream-zlib.c | 4 ++--
diffs (294 lines):
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib-mail/istream-header-filter.c
--- 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 @@ struct header_filter_istream {
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 @@ static ssize_t i_stream_header_filter_re
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 @@ 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(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 @@ static void i_stream_header_filter_seek(
/* 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 @@ 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->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 @@ i_stream_create_header_filter(struct ist
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 @@ i_stream_create_header_filter(struct ist
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);
+}
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib-storage/index/mbox/istream-raw-mbox.c
--- 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 istream *i_stream_create_raw_mbox
{
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 @@ struct istream *i_stream_create_raw_mbox
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 @@ struct istream *i_stream_create_raw_mbox
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)
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-concat.c
--- 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 @@ struct istream *i_stream_create_concat(s
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);
+}
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-crlf.c
--- 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 @@ i_stream_create_crlf_full(struct istream
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 @@ i_stream_create_crlf_full(struct istream
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)
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-data.c
--- 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 @@ struct istream *i_stream_create_from_dat
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;
}
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-file.c
--- 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 @@ struct istream *i_stream_create_fd(int f
fstream->istream.istream.seekable = TRUE;
}
- return i_stream_create(&fstream->istream, fd, 0);
+ return i_stream_create(&fstream->istream, NULL, fd);
}
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-internal.h
--- 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 @@ struct istream_private {
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);
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-limit.c
--- 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 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 @@ static void i_stream_limit_destroy(struc
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 @@ static ssize_t i_stream_limit_read(struc
}
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 @@ struct istream *i_stream_create_limit(st
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 @@ struct istream *i_stream_create_limit(st
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));
}
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-mmap.c
--- 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 @@ struct istream *i_stream_create_mmap(int
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;
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-seekable.c
--- 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 @@ i_stream_create_seekable(struct istream
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);
+}
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream-tee.c
--- 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 @@ struct istream *tee_i_stream_create_chil
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));
+}
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/lib/istream.c
--- 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 @@ i_stream_default_stat(struct istream_pri
}
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)
diff -r 4b51ee73ed51 -r 85cf52f0bc64 src/plugins/zlib/istream-zlib.c
--- 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 @@ struct istream *i_stream_create_zlib(int
zstream->istream.istream.seekable = TRUE;
}
- return i_stream_create(&zstream->istream, fd, 0);
-}
+ return i_stream_create(&zstream->istream, NULL, fd);
+}
More information about the dovecot-cvs
mailing list