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;
 }