Mercurial > dovecot > core-2.2
changeset 18896:ac64c307d179
istream filters: If parent's i_stream_stat() fails, copy the stream_errno.
This doesn't actually change any functionality yet, since most
i_stream_stat() callers aren't using i_stream_get_error().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 30 Jun 2015 12:18:08 +0300 |
parents | d4422b0560fe |
children | 3bf5df6f63b2 |
files | src/lib-compression/istream-bzlib.c src/lib-compression/istream-lz4.c src/lib-compression/istream-lzma.c src/lib-compression/istream-zlib.c src/lib-fs/istream-metawrap.c src/lib-mail/istream-header-filter.c src/lib-storage/index/mbox/istream-raw-mbox.c src/lib/istream-limit.c src/lib/istream-sized.c src/lib/istream.c src/plugins/mail-filter/istream-ext-filter.c |
diffstat | 11 files changed, 36 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-compression/istream-bzlib.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib-compression/istream-bzlib.c Tue Jun 30 12:18:08 2015 +0300 @@ -266,8 +266,10 @@ const struct stat *st; size_t size; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; /* when exact=FALSE always return the parent stat's size, even if we
--- a/src/lib-compression/istream-lz4.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib-compression/istream-lz4.c Tue Jun 30 12:18:08 2015 +0300 @@ -249,8 +249,10 @@ const struct stat *st; size_t size; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; /* when exact=FALSE always return the parent stat's size, even if we
--- a/src/lib-compression/istream-lzma.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib-compression/istream-lzma.c Tue Jun 30 12:18:08 2015 +0300 @@ -275,8 +275,10 @@ const struct stat *st; size_t size; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; /* when exact=FALSE always return the parent stat's size, even if we
--- a/src/lib-compression/istream-zlib.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib-compression/istream-zlib.c Tue Jun 30 12:18:08 2015 +0300 @@ -417,8 +417,10 @@ const struct stat *st; size_t size; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; /* when exact=FALSE always return the parent stat's size, even if we
--- a/src/lib-fs/istream-metawrap.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib-fs/istream-metawrap.c Tue Jun 30 12:18:08 2015 +0300 @@ -92,8 +92,10 @@ const struct stat *st; int ret; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; if (mstream->in_metadata) {
--- a/src/lib-mail/istream-header-filter.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib-mail/istream-header-filter.c Tue Jun 30 12:18:08 2015 +0300 @@ -505,8 +505,10 @@ const struct stat *st; uoff_t old_offset; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; if (stream->statbuf.st_size == -1 || !exact) return 0;
--- a/src/lib-storage/index/mbox/istream-raw-mbox.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib-storage/index/mbox/istream-raw-mbox.c Tue Jun 30 12:18:08 2015 +0300 @@ -417,8 +417,10 @@ const struct stat *st; struct raw_mbox_istream *rstream = (struct raw_mbox_istream *)stream; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; stream->statbuf.st_size =
--- a/src/lib/istream-limit.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib/istream-limit.c Tue Jun 30 12:18:08 2015 +0300 @@ -77,8 +77,10 @@ struct limit_istream *lstream = (struct limit_istream *) stream; const struct stat *st; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; if (lstream->v_size != (uoff_t)-1)
--- a/src/lib/istream-sized.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib/istream-sized.c Tue Jun 30 12:18:08 2015 +0300 @@ -98,8 +98,10 @@ /* parent stream may be base64-decoder. don't waste time decoding the entire stream, since we already know what the size is supposed to be. */ - if (i_stream_stat(stream->parent, FALSE, &st) < 0) + if (i_stream_stat(stream->parent, FALSE, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; stream->statbuf.st_size = sstream->size;
--- a/src/lib/istream.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/lib/istream.c Tue Jun 30 12:18:08 2015 +0300 @@ -767,8 +767,10 @@ if (stream->parent == NULL) return stream->istream.stream_errno == 0 ? 0 : -1; - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; if (exact && !stream->stream_size_passthrough) { /* exact size is not known, even if parent returned something */ @@ -781,8 +783,10 @@ i_stream_default_get_size(struct istream_private *stream, bool exact, uoff_t *size_r) { - if (stream->stat(stream, exact) < 0) + if (stream->stat(stream, exact) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } if (stream->statbuf.st_size == -1) return 0;
--- a/src/plugins/mail-filter/istream-ext-filter.c Tue Jun 30 12:17:35 2015 +0300 +++ b/src/plugins/mail-filter/istream-ext-filter.c Tue Jun 30 12:18:08 2015 +0300 @@ -135,8 +135,10 @@ i_assert(!exact); - if (i_stream_stat(stream->parent, exact, &st) < 0) + if (i_stream_stat(stream->parent, exact, &st) < 0) { + stream->istream.stream_errno = stream->parent->stream_errno; return -1; + } stream->statbuf = *st; return 0; }