]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Add i_stream_get_root_io() and use it to deduplicate code
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 8 Feb 2018 00:22:18 +0000 (02:22 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 15 Feb 2018 10:22:25 +0000 (12:22 +0200)
src/lib/istream-private.h
src/lib/istream.c

index c6b69d5754134683f5848d986af47cd9f955f6e3..ff6003a98713c37cf4c86aeda519bb0d183cc912 100644 (file)
@@ -72,6 +72,7 @@ ssize_t i_stream_read_copy_from_parent(struct istream *istream);
 void i_stream_default_seek_nonseekable(struct istream_private *stream,
                                       uoff_t v_offset, bool mark);
 
+struct istream *i_stream_get_root_io(struct istream *stream);
 void i_stream_set_io(struct istream *stream, struct io *io);
 void i_stream_unset_io(struct istream *stream, struct io *io);
 
index ab957a3000ea36d3c0a9f85b858d18ccda589476..3937118e173b22be448048e49598241077b306df 100644 (file)
@@ -682,15 +682,21 @@ bool i_stream_add_data(struct istream *_stream, const unsigned char *data,
        return TRUE;
 }
 
-void i_stream_set_input_pending(struct istream *stream, bool pending)
+struct istream *i_stream_get_root_io(struct istream *stream)
 {
-       if (!pending)
-               return;
-
        while (stream->real_stream->parent != NULL) {
                i_assert(stream->real_stream->io == NULL);
                stream = stream->real_stream->parent;
        }
+       return stream;
+}
+
+void i_stream_set_input_pending(struct istream *stream, bool pending)
+{
+       if (!pending)
+               return;
+
+       stream = i_stream_get_root_io(stream);
        if (stream->real_stream->io != NULL)
                io_set_pending(stream->real_stream->io);
 }
@@ -706,10 +712,7 @@ void i_stream_switch_ioloop(struct istream *stream)
 
 void i_stream_set_io(struct istream *stream, struct io *io)
 {
-       while (stream->real_stream->parent != NULL) {
-               i_assert(stream->real_stream->io == NULL);
-               stream = stream->real_stream->parent;
-       }
+       stream = i_stream_get_root_io(stream);
 
        i_assert(stream->real_stream->io == NULL);
        stream->real_stream->io = io;
@@ -717,10 +720,7 @@ void i_stream_set_io(struct istream *stream, struct io *io)
 
 void i_stream_unset_io(struct istream *stream, struct io *io)
 {
-       while (stream->real_stream->parent != NULL) {
-               i_assert(stream->real_stream->io == NULL);
-               stream = stream->real_stream->parent;
-       }
+       stream = i_stream_get_root_io(stream);
 
        i_assert(stream->real_stream->io == io);
        stream->real_stream->io = NULL;