changeset 21365:cc6e4b239003

istream-mmap: Mark stream eof on error and copy errno
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Sun, 25 Dec 2016 10:14:07 +0200
parents 518bc42408d6
children f7f4cb784890
files src/lib/istream-mmap.c
diffstat 1 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/istream-mmap.c	Fri Dec 16 20:27:09 2016 +0200
+++ b/src/lib/istream-mmap.c	Sun Dec 25 10:14:07 2016 +0200
@@ -179,6 +179,7 @@
 	if (fstat(mstream->istream.fd, &mstream->istream.statbuf) < 0) {
 		i_error("mmap_istream.fstat(%s) failed: %m",
 			i_stream_get_name(&mstream->istream.istream));
+		mstream->istream.istream.stream_errno = errno;
 		return -1;
 	}
 
@@ -205,10 +206,14 @@
 	if (mmap_pagemask == 0)
 		mmap_pagemask = mmap_get_page_size()-1;
 
+	mstream = i_new(struct mmap_istream, 1);
+
 	if (v_size == 0) {
-		if (fstat(fd, &st) < 0)
+		if (fstat(fd, &st) < 0) {
 			i_error("i_stream_create_mmap(): fstat() failed: %m");
-		else {
+			mstream->istream.istream.eof = TRUE;
+			mstream->istream.istream.stream_errno = errno;
+		} else {
 			v_size = st.st_size;
 			if (start_offset > v_size)
 				start_offset = v_size;
@@ -216,7 +221,6 @@
 		}
 	}
 
-	mstream = i_new(struct mmap_istream, 1);
 	mstream->autoclose_fd = autoclose_fd;
 	mstream->v_size = v_size;