dovecot-2.2: istream: Added i_stream_init_parent() to lazily ini...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Nov 6 23:01:13 EET 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/1c9ecb6bcccc
changeset: 16942:1c9ecb6bcccc
user: Timo Sirainen <tss at iki.fi>
date: Wed Nov 06 21:05:51 2013 +0200
description:
istream: Added i_stream_init_parent() to lazily initialize the parent stream.
diffstat:
src/lib/istream-private.h | 3 +++
src/lib/istream.c | 29 +++++++++++++++++------------
2 files changed, 20 insertions(+), 12 deletions(-)
diffs (56 lines):
diff -r e67095b8486e -r 1c9ecb6bcccc src/lib/istream-private.h
--- a/src/lib/istream-private.h Wed Nov 06 19:03:10 2013 +0200
+++ b/src/lib/istream-private.h Wed Nov 06 21:05:51 2013 +0200
@@ -52,6 +52,9 @@
struct istream * ATTR_NOWARN_UNUSED_RESULT
i_stream_create(struct istream_private *stream, struct istream *parent, int fd)
ATTR_NULL(2);
+/* Initialize parent lazily after i_stream_create() has already been called. */
+void i_stream_init_parent(struct istream_private *_stream,
+ struct istream *parent);
void i_stream_compress(struct istream_private *stream);
void i_stream_grow_buffer(struct istream_private *stream, size_t bytes);
diff -r e67095b8486e -r 1c9ecb6bcccc src/lib/istream.c
--- a/src/lib/istream.c Wed Nov 06 19:03:10 2013 +0200
+++ b/src/lib/istream.c Wed Nov 06 21:05:51 2013 +0200
@@ -703,22 +703,27 @@
return 1;
}
+void i_stream_init_parent(struct istream_private *_stream,
+ struct istream *parent)
+{
+ _stream->access_counter = parent->real_stream->access_counter;
+ _stream->parent = parent;
+ _stream->parent_start_offset = parent->v_offset;
+ _stream->parent_expected_offset = parent->v_offset;
+ _stream->abs_start_offset = parent->v_offset +
+ parent->real_stream->abs_start_offset;
+ /* if parent stream is an istream-error, copy the error */
+ _stream->istream.stream_errno = parent->stream_errno;
+ _stream->istream.eof = parent->eof;
+ i_stream_ref(parent);
+}
+
struct istream *
i_stream_create(struct istream_private *_stream, struct istream *parent, int fd)
{
_stream->fd = fd;
- if (parent != NULL) {
- _stream->access_counter = parent->real_stream->access_counter;
- _stream->parent = parent;
- _stream->parent_start_offset = parent->v_offset;
- _stream->parent_expected_offset = parent->v_offset;
- _stream->abs_start_offset = parent->v_offset +
- parent->real_stream->abs_start_offset;
- /* if parent stream is an istream-error, copy the error */
- _stream->istream.stream_errno = parent->stream_errno;
- _stream->istream.eof = parent->eof;
- i_stream_ref(parent);
- }
+ if (parent != NULL)
+ i_stream_init_parent(_stream, parent);
_stream->istream.real_stream = _stream;
if (_stream->iostream.close == NULL)
More information about the dovecot-cvs
mailing list