From: Timo Sirainen Date: Tue, 23 Jun 2009 22:35:26 +0000 (-0400) Subject: Moved some common istream functionality to default istream implementation. X-Git-Tag: 2.0.alpha1~533 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=01e606cda5192c4254c090624a0b2ca92da6da8e;p=thirdparty%2Fdovecot%2Fcore.git Moved some common istream functionality to default istream implementation. --HG-- branch : HEAD --- diff --git a/src/lib-mail/istream-dot.c b/src/lib-mail/istream-dot.c index 01ee9979be..0e26f166a3 100644 --- a/src/lib-mail/istream-dot.c +++ b/src/lib-mail/istream-dot.c @@ -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; diff --git a/src/lib-mail/istream-header-filter.c b/src/lib-mail/istream-header-filter.c index bb2a66b8c7..4030de228e 100644 --- a/src/lib-mail/istream-header-filter.c +++ b/src/lib-mail/istream-header-filter.c @@ -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); } diff --git a/src/lib-storage/index/istream-mail-stats.c b/src/lib-storage/index/istream-mail-stats.c index 2c89cd9c9d..502da60a21 100644 --- a/src/lib-storage/index/istream-mail-stats.c +++ b/src/lib-storage/index/istream-mail-stats.c @@ -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; diff --git a/src/lib-storage/index/mbox/istream-raw-mbox.c b/src/lib-storage/index/mbox/istream-raw-mbox.c index 52416c4035..556173950f 100644 --- a/src/lib-storage/index/mbox/istream-raw-mbox.c +++ b/src/lib-storage/index/mbox/istream-raw-mbox.c @@ -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); } diff --git a/src/lib/istream-crlf.c b/src/lib/istream-crlf.c index c466f16a0a..97baac0818 100644 --- a/src/lib/istream-crlf.c +++ b/src/lib/istream-crlf.c @@ -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; diff --git a/src/lib/istream-file.c b/src/lib/istream-file.c index 6887965c4c..e224dcc00d 100644 --- a/src/lib/istream-file.c +++ b/src/lib/istream-file.c @@ -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; diff --git a/src/lib/istream-limit.c b/src/lib/istream-limit.c index 53ce46caa8..0f288c4bef 100644 --- a/src/lib/istream-limit.c +++ b/src/lib/istream-limit.c @@ -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; diff --git a/src/lib/istream.c b/src/lib/istream.c index 476484e854..def9acbe8e 100644 --- a/src/lib/istream.c +++ b/src/lib/istream.c @@ -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) diff --git a/src/plugins/zlib/istream-zlib.c b/src/plugins/zlib/istream-zlib.c index 52193fe989..2a101f2060 100644 --- a/src/plugins/zlib/istream-zlib.c +++ b/src/plugins/zlib/istream-zlib.c @@ -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;