]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
istream-seekable: Record stream size in stat
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 16 Mar 2018 11:40:26 +0000 (13:40 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 16 Mar 2018 11:55:28 +0000 (13:55 +0200)
Otherwise the size is shown 0

src/lib/istream-seekable.c

index 228fc79b1984480203ec0869ffdb185e601162bd..875bba667f25884b50db81552630828633b2a7da 100644 (file)
@@ -327,7 +327,7 @@ i_stream_seekable_stat(struct istream_private *stream, bool exact)
 {
        struct seekable_istream *sstream = (struct seekable_istream *)stream;
        const struct stat *st;
-       uoff_t old_offset;
+       uoff_t old_offset, len;
        ssize_t ret;
 
        if (sstream->size != (uoff_t)-1) {
@@ -351,6 +351,7 @@ i_stream_seekable_stat(struct istream_private *stream, bool exact)
                        sstream->cur_input->v_offset);
        }
        i_stream_skip(&stream->istream, stream->pos - stream->skip);
+       len = stream->pos;
        i_stream_seek(&stream->istream, old_offset);
        unref_streams(sstream);
 
@@ -366,7 +367,7 @@ i_stream_seekable_stat(struct istream_private *stream, bool exact)
                /* buffer is completely in memory */
                i_assert(sstream->fd == -1);
 
-               stream->statbuf.st_size = stream->pos;
+               stream->statbuf.st_size = len;
        }
        return 0;
 }