]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: istream-chain/concat cleanup - return early if no new data is read
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Thu, 26 Oct 2017 11:56:26 +0000 (14:56 +0300)
committerTimo Sirainen <tss@dovecot.fi>
Wed, 1 Nov 2017 11:45:51 +0000 (13:45 +0200)
There's no need to change the buffer or other variables. This simplifies
the following changes.

This cleanup is identical for istream-concat and istream-chain.

src/lib/istream-chain.c
src/lib/istream-concat.c

index fbe458a2a64876937efe363606355e71bc29fa61..d192204c5e39db290b1a03d61e646102c63bce20 100644 (file)
@@ -243,17 +243,17 @@ static ssize_t i_stream_chain_read(struct istream_private *stream)
                data = i_stream_get_data(link->stream, &data_size);
        }
 
+       if (data_size == cur_data_pos) {
+               /* nothing new read - preserve the buffer as it was */
+               i_assert(ret == 0 || ret == -1);
+               return ret;
+       }
        if (cstream->prev_stream_left == 0) {
                /* we can point directly to the current stream's buffers */
                stream->buffer = data;
                stream->pos -= stream->skip;
                stream->skip = 0;
                new_pos = data_size;
-       } else if (data_size == cur_data_pos) {
-               /* nothing new read */
-               i_assert(ret == 0 || ret == -1);
-               stream->buffer = stream->w_buffer;
-               new_pos = stream->pos;
        } else {
                /* we still have some of the previous stream left. merge the
                   new data with it. */
@@ -265,8 +265,8 @@ static ssize_t i_stream_chain_read(struct istream_private *stream)
                new_pos = stream->pos + new_bytes_count;
        }
 
-       ret = new_pos > stream->pos ? (ssize_t)(new_pos - stream->pos) :
-               (ret == 0 ? 0 : -1);
+       i_assert(new_pos > stream->pos);
+       ret = (ssize_t)(new_pos - stream->pos);
        stream->pos = new_pos;
        cstream->prev_skip = stream->skip;
        return ret;
index 2f5efd2971592bad651b3f2c81f587051a4d7bf1..29ecfdd8a7cae1d839621ab99fa443e1e529f0b1 100644 (file)
@@ -187,17 +187,17 @@ static ssize_t i_stream_concat_read(struct istream_private *stream)
                data = i_stream_get_data(cstream->cur_input, &data_size);
        }
 
+       if (data_size == cur_data_pos) {
+               /* nothing new read - preserve the buffer as it was */
+               i_assert(ret == 0 || ret == -1);
+               return ret;
+       }
        if (cstream->prev_stream_left == 0) {
                /* we can point directly to the current stream's buffers */
                stream->buffer = data;
                stream->pos -= stream->skip;
                stream->skip = 0;
                new_pos = data_size;
-       } else if (data_size == cur_data_pos) {
-               /* nothing new read */
-               i_assert(ret == 0 || ret == -1);
-               stream->buffer = stream->w_buffer;
-               new_pos = stream->pos;
        } else {
                /* we still have some of the previous stream left. merge the
                   new data with it. */
@@ -219,8 +219,8 @@ static ssize_t i_stream_concat_read(struct istream_private *stream)
                new_pos = stream->pos + new_bytes_count;
        }
 
-       ret = new_pos > stream->pos ? (ssize_t)(new_pos - stream->pos) :
-               (ret == 0 ? 0 : -1);
+       i_assert(new_pos > stream->pos);
+       ret = (ssize_t)(new_pos - stream->pos);
        stream->pos = new_pos;
        cstream->prev_skip = stream->skip;
        return ret;