From: Timo Sirainen Date: Tue, 9 Nov 2010 21:03:34 +0000 (+0000) Subject: istream-[b]zlib: Corking now affects also the parent stream. X-Git-Tag: 2.0.8~103 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1a70427c2c4c9a0aeec6549a5f179599af25a939;p=thirdparty%2Fdovecot%2Fcore.git istream-[b]zlib: Corking now affects also the parent stream. --- diff --git a/src/plugins/zlib/ostream-bzlib.c b/src/plugins/zlib/ostream-bzlib.c index ad0d41dc7b..a1b73a4c61 100644 --- a/src/plugins/zlib/ostream-bzlib.c +++ b/src/plugins/zlib/ostream-bzlib.c @@ -119,6 +119,19 @@ static int o_stream_bzlib_send_flush(struct bzlib_ostream *zstream) return 0; } +static void o_stream_bzlib_cork(struct ostream_private *stream, bool set) +{ + struct bzlib_ostream *zstream = (struct bzlib_ostream *)stream; + + stream->corked = set; + if (set) + o_stream_cork(zstream->output); + else { + (void)o_stream_flush(&stream->ostream); + o_stream_uncork(zstream->output); + } +} + static int o_stream_bzlib_flush(struct ostream_private *stream) { struct bzlib_ostream *zstream = (struct bzlib_ostream *)stream; @@ -161,6 +174,7 @@ struct ostream *o_stream_create_bz2(struct ostream *output, int level) zstream = i_new(struct bzlib_ostream, 1); zstream->ostream.sendv = o_stream_bzlib_sendv; + zstream->ostream.cork = o_stream_bzlib_cork; zstream->ostream.flush = o_stream_bzlib_flush; zstream->ostream.iostream.close = o_stream_bzlib_close; zstream->output = output; diff --git a/src/plugins/zlib/ostream-zlib.c b/src/plugins/zlib/ostream-zlib.c index 750e852d16..a3f9dc35ab 100644 --- a/src/plugins/zlib/ostream-zlib.c +++ b/src/plugins/zlib/ostream-zlib.c @@ -181,6 +181,19 @@ static int o_stream_zlib_send_flush(struct zlib_ostream *zstream) return 0; } +static void o_stream_zlib_cork(struct ostream_private *stream, bool set) +{ + struct zlib_ostream *zstream = (struct zlib_ostream *)stream; + + stream->corked = set; + if (set) + o_stream_cork(zstream->output); + else { + (void)o_stream_flush(&stream->ostream); + o_stream_uncork(zstream->output); + } +} + static int o_stream_zlib_flush(struct ostream_private *stream) { struct zlib_ostream *zstream = (struct zlib_ostream *)stream; @@ -240,6 +253,7 @@ o_stream_create_zlib(struct ostream *output, int level, bool gz) zstream = i_new(struct zlib_ostream, 1); zstream->ostream.sendv = o_stream_zlib_sendv; + zstream->ostream.cork = o_stream_zlib_cork; zstream->ostream.flush = o_stream_zlib_flush; zstream->ostream.iostream.close = o_stream_zlib_close; zstream->output = output;