]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Moved some common istream functionality to default istream implementation.
authorTimo Sirainen <tss@iki.fi>
Tue, 23 Jun 2009 22:35:26 +0000 (18:35 -0400)
committerTimo Sirainen <tss@iki.fi>
Tue, 23 Jun 2009 22:35:26 +0000 (18:35 -0400)
--HG--
branch : HEAD

src/lib-mail/istream-dot.c
src/lib-mail/istream-header-filter.c
src/lib-storage/index/istream-mail-stats.c
src/lib-storage/index/mbox/istream-raw-mbox.c
src/lib/istream-crlf.c
src/lib/istream-file.c
src/lib/istream-limit.c
src/lib/istream.c
src/plugins/zlib/istream-zlib.c

index 01ee9979bef468404d1cf01023df9f9305457e0b..0e26f166a346042d1ead097bb03a58310a4ea1b6 100644 (file)
@@ -21,24 +21,6 @@ struct dot_istream {
        unsigned int send_last_lf:1;
 };
 
-static void i_stream_dot_destroy(struct iostream_private *stream)
-{
-       struct dot_istream *dstream = (struct dot_istream *)stream;
-
-       i_free(dstream->istream.w_buffer);
-       i_stream_unref(&dstream->istream.parent);
-}
-
-static void
-i_stream_dot_set_max_buffer_size(struct iostream_private *stream,
-                                size_t max_size)
-{
-       struct dot_istream *dstream = (struct dot_istream *)stream;
-
-       dstream->istream.max_buffer_size = max_size;
-       i_stream_set_max_buffer_size(dstream->istream.parent, max_size);
-}
-
 static int i_stream_dot_read_some(struct dot_istream *dstream)
 {
        struct istream_private *stream = &dstream->istream;
@@ -234,15 +216,9 @@ struct istream *i_stream_create_dot(struct istream *input, bool send_last_lf)
 {
        struct dot_istream *dstream;
 
-       i_stream_ref(input);
-
        dstream = i_new(struct dot_istream, 1);
        dstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
 
-       dstream->istream.iostream.destroy = i_stream_dot_destroy;
-       dstream->istream.iostream.set_max_buffer_size =
-               i_stream_dot_set_max_buffer_size;
-
        dstream->istream.read = i_stream_dot_read;
        dstream->istream.seek = i_stream_dot_seek;
        dstream->istream.stat = i_stream_dot_stat;
index bb2a66b8c72b4f81e755d342d6018c1cee4d5321..4030de228ef42f41654b775757750f6cd7c4b425 100644 (file)
@@ -51,17 +51,6 @@ static void i_stream_header_filter_destroy(struct iostream_private *stream)
        pool_unref(&mstream->pool);
 }
 
-static void
-i_stream_header_filter_set_max_buffer_size(struct iostream_private *stream,
-                                          size_t max_size)
-{
-       struct header_filter_istream *mstream =
-               (struct header_filter_istream *)stream;
-
-       mstream->istream.max_buffer_size = max_size;
-       i_stream_set_max_buffer_size(mstream->istream.parent, max_size);
-}
-
 static ssize_t
 read_mixed(struct header_filter_istream *mstream, size_t body_highwater_size)
 {
@@ -421,9 +410,6 @@ i_stream_create_header_filter(struct istream *input,
        mstream->add_missing_eoh = (flags & HEADER_FILTER_ADD_MISSING_EOH) != 0;
 
        mstream->istream.iostream.destroy = i_stream_header_filter_destroy;
-       mstream->istream.iostream.set_max_buffer_size =
-               i_stream_header_filter_set_max_buffer_size;
-
        mstream->istream.read = i_stream_header_filter_read;
        mstream->istream.seek = i_stream_header_filter_seek;
        mstream->istream.sync = i_stream_header_filter_sync;
@@ -432,6 +418,5 @@ i_stream_create_header_filter(struct istream *input,
        mstream->istream.istream.blocking = input->blocking;
        mstream->istream.istream.seekable = input->seekable;
 
-       i_stream_ref(input);
        return i_stream_create(&mstream->istream, input, -1);
 }
index 2c89cd9c9d858c63103aec539b76eb9b2e373861..502da60a21df4456d7eac2129c2855859910ab4b 100644 (file)
@@ -20,17 +20,6 @@ static void i_stream_mail_stats_destroy(struct iostream_private *stream)
        i_stream_unref(&mstream->istream.parent);
 }
 
-static void
-i_stream_mail_stats_set_max_buffer_size(struct iostream_private *stream,
-                                       size_t max_size)
-{
-       struct mail_stats_istream *mstream =
-               (struct mail_stats_istream *)stream;
-
-       mstream->istream.max_buffer_size = max_size;
-       i_stream_set_max_buffer_size(mstream->istream.parent, max_size);
-}
-
 static ssize_t
 i_stream_mail_stats_read_mail_stats(struct istream_private *stream)
 {
@@ -81,9 +70,6 @@ struct istream *i_stream_create_mail_stats_counter(struct mail_private *mail,
        mstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
 
        mstream->istream.iostream.destroy = i_stream_mail_stats_destroy;
-       mstream->istream.iostream.set_max_buffer_size =
-               i_stream_mail_stats_set_max_buffer_size;
-
        mstream->istream.parent = input;
        mstream->istream.read = i_stream_mail_stats_read_mail_stats;
        mstream->istream.seek = i_stream_mail_stats_seek;
index 52416c403509dcc12e568c1ef27d4af2d727036d..556173950f10de22186140178325908f2556f904 100644 (file)
@@ -37,16 +37,6 @@ static void i_stream_raw_mbox_destroy(struct iostream_private *stream)
        i_stream_unref(&rstream->istream.parent);
 }
 
-static void
-i_stream_raw_mbox_set_max_buffer_size(struct iostream_private *stream,
-                                     size_t max_size)
-{
-       struct raw_mbox_istream *rstream = (struct raw_mbox_istream *)stream;
-
-       rstream->istream.max_buffer_size = max_size;
-       i_stream_set_max_buffer_size(rstream->istream.parent, max_size);
-}
-
 static int mbox_read_from_line(struct raw_mbox_istream *rstream)
 {
        const unsigned char *buf, *p;
@@ -442,9 +432,6 @@ i_stream_create_raw_mbox(struct istream *input, const char *path)
        rstream->next_received_time = (time_t)-1;
 
        rstream->istream.iostream.destroy = i_stream_raw_mbox_destroy;
-       rstream->istream.iostream.set_max_buffer_size =
-               i_stream_raw_mbox_set_max_buffer_size;
-
        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;
@@ -454,7 +441,6 @@ i_stream_create_raw_mbox(struct istream *input, const char *path)
        rstream->istream.istream.blocking = input->blocking;
        rstream->istream.istream.seekable = input->seekable;
 
-       i_stream_ref(input);
        return i_stream_create(&rstream->istream, input, -1);
 }
 
index c466f16a0a993030c5c0c54ba24353df855deda6..97baac0818b44ca464d3158c06f538c316045beb 100644 (file)
@@ -11,24 +11,6 @@ struct crlf_istream {
        unsigned int last_cr:1;
 };
 
-static void i_stream_crlf_destroy(struct iostream_private *stream)
-{
-       struct crlf_istream *cstream = (struct crlf_istream *)stream;
-
-       i_free(cstream->istream.w_buffer);
-       i_stream_unref(&cstream->istream.parent);
-}
-
-static void
-i_stream_crlf_set_max_buffer_size(struct iostream_private *stream,
-                                  size_t max_size)
-{
-       struct crlf_istream *cstream = (struct crlf_istream *)stream;
-
-       cstream->istream.max_buffer_size = max_size;
-       i_stream_set_max_buffer_size(cstream->istream.parent, max_size);
-}
-
 static int i_stream_crlf_read_common(struct crlf_istream *cstream)
 {
        struct istream_private *stream = &cstream->istream;
@@ -188,15 +170,9 @@ i_stream_create_crlf_full(struct istream *input, bool crlf)
 {
        struct crlf_istream *cstream;
 
-       i_stream_ref(input);
-
        cstream = i_new(struct crlf_istream, 1);
        cstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
 
-       cstream->istream.iostream.destroy = i_stream_crlf_destroy;
-       cstream->istream.iostream.set_max_buffer_size =
-               i_stream_crlf_set_max_buffer_size;
-
        cstream->istream.read = crlf ? i_stream_crlf_read_crlf :
                i_stream_crlf_read_lf;
        cstream->istream.seek = i_stream_crlf_seek;
index 6887965c4c9ad9b36f60ce230bdd2f8d91f71f24..e224dcc00d3881253eebeae77648b39a21cfef3c 100644 (file)
@@ -33,13 +33,6 @@ static void i_stream_file_close(struct iostream_private *stream)
        _stream->fd = -1;
 }
 
-static void i_stream_file_destroy(struct iostream_private *stream)
-{
-       struct istream_private *_stream = (struct istream_private *)stream;
-
-       i_free(_stream->w_buffer);
-}
-
 static ssize_t i_stream_file_read(struct istream_private *stream)
 {
        struct file_istream *fstream = (struct file_istream *) stream;
@@ -157,8 +150,6 @@ struct istream *i_stream_create_fd(int fd, size_t max_buffer_size,
        fstream->autoclose_fd = autoclose_fd;
 
        fstream->istream.iostream.close = i_stream_file_close;
-       fstream->istream.iostream.destroy = i_stream_file_destroy;
-
        fstream->istream.max_buffer_size = max_buffer_size;
        fstream->istream.read = i_stream_file_read;
        fstream->istream.seek = i_stream_file_seek;
index 53ce46caa83fcfe6be678b379d93f0632f2fb7b1..0f288c4bef3eff165c83d6bbe97c84b5356364bb 100644 (file)
@@ -9,31 +9,6 @@ struct limit_istream {
        uoff_t v_size;
 };
 
-static void i_stream_limit_destroy(struct iostream_private *stream)
-{
-       struct limit_istream *lstream = (struct limit_istream *) stream;
-       uoff_t v_offset;
-
-       v_offset = lstream->istream.parent_start_offset +
-               lstream->istream.istream.v_offset;
-       if (lstream->istream.parent->seekable ||
-           v_offset > lstream->istream.parent->v_offset) {
-               /* get to same position in parent stream */
-               i_stream_seek(lstream->istream.parent, v_offset);
-       }
-       i_stream_unref(&lstream->istream.parent);
-}
-
-static void
-i_stream_limit_set_max_buffer_size(struct iostream_private *stream,
-                                  size_t max_size)
-{
-       struct limit_istream *lstream = (struct limit_istream *) stream;
-
-       lstream->istream.max_buffer_size = max_size;
-       i_stream_set_max_buffer_size(lstream->istream.parent, max_size);
-}
-
 static ssize_t i_stream_limit_read(struct istream_private *stream)
 {
        struct limit_istream *lstream = (struct limit_istream *) stream;
@@ -137,16 +112,10 @@ struct istream *i_stream_create_limit(struct istream *input, uoff_t v_size)
 {
        struct limit_istream *lstream;
 
-       i_stream_ref(input);
-
        lstream = i_new(struct limit_istream, 1);
        lstream->v_size = v_size;
        lstream->istream.max_buffer_size = input->real_stream->max_buffer_size;
 
-       lstream->istream.iostream.destroy = i_stream_limit_destroy;
-       lstream->istream.iostream.set_max_buffer_size =
-               i_stream_limit_set_max_buffer_size;
-
        lstream->istream.parent = input;
        lstream->istream.read = i_stream_limit_read;
        lstream->istream.seek = i_stream_limit_seek;
index 476484e8540c81197182200342a159a2e3833eb4..def9acbe8e70da3fee8fabb26cf7a88812f26119 100644 (file)
@@ -474,6 +474,26 @@ i_stream_default_set_max_buffer_size(struct iostream_private *stream,
        struct istream_private *_stream = (struct istream_private *)stream;
 
        _stream->max_buffer_size = max_size;
+       if (_stream->parent != NULL)
+               i_stream_set_max_buffer_size(_stream->parent, max_size);
+}
+
+static void i_stream_default_destroy(struct iostream_private *stream)
+{
+       struct istream_private *_stream = (struct istream_private *)stream;
+               uoff_t v_offset;
+
+       i_free(_stream->w_buffer);
+       if (_stream->parent != NULL) {
+               v_offset = _stream->parent_start_offset +
+                       _stream->istream.v_offset;
+               if (_stream->parent->seekable ||
+                   v_offset > _stream->parent->v_offset) {
+                       /* get to same position in parent stream */
+                       i_stream_seek(_stream->parent, v_offset);
+               }
+               i_stream_unref(&_stream->parent);
+       }
 }
 
 static const struct stat *
@@ -507,9 +527,12 @@ i_stream_create(struct istream_private *_stream, struct istream *parent, int fd)
                _stream->parent_start_offset = parent->v_offset;
                _stream->abs_start_offset = parent->v_offset +
                        parent->real_stream->abs_start_offset;
+               i_stream_ref(parent);
        }
        _stream->istream.real_stream = _stream;
 
+       if (_stream->iostream.destroy == NULL)
+               _stream->iostream.destroy = i_stream_default_destroy;
        if (_stream->stat == NULL)
                _stream->stat = i_stream_default_stat;
        if (_stream->get_size == NULL)
index 52193fe989c840777c4df954ae485bb33a464adb..2a101f20605ac80d8fb2731f656a21fa360395d2 100644 (file)
@@ -47,13 +47,6 @@ static void i_stream_zlib_close(struct iostream_private *stream)
        }
 }
 
-static void i_stream_zlib_destroy(struct iostream_private *stream ATTR_UNUSED)
-{
-       struct istream_private *_stream = (struct istream_private *)stream;
-
-       i_free(_stream->w_buffer);
-}
-
 static ssize_t i_stream_zlib_read(struct istream_private *stream)
 {
        struct zlib_istream *zstream = (struct zlib_istream *)stream;
@@ -232,8 +225,6 @@ struct istream *i_stream_create_zlib(int fd)
        zstream->cached_size = (uoff_t)-1;
 
        zstream->istream.iostream.close = i_stream_zlib_close;
-       zstream->istream.iostream.destroy = i_stream_zlib_destroy;
-
        zstream->istream.max_buffer_size = DEFAULT_MAX_BUFFER_SIZE;
        zstream->istream.read = i_stream_zlib_read;
        zstream->istream.seek = i_stream_zlib_seek;