patch 9.0.0819
diff --git a/src/fileio.c b/src/fileio.c
index ab867b7..bca8271 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -589,8 +589,9 @@
 	// correctly set when reading stdin.
 	if (!read_buffer)
 	{
-	    curbuf->b_p_eol = TRUE;
 	    curbuf->b_p_eof = FALSE;
+	    curbuf->b_start_eof = FALSE;
+	    curbuf->b_p_eol = TRUE;
 	    curbuf->b_start_eol = TRUE;
 	}
 	curbuf->b_p_bomb = FALSE;
@@ -2278,15 +2279,18 @@
     if (!error
 	    && !got_int
 	    && linerest != 0
+	    // TODO: should we handle CTRL-Z differently here for 'endoffile'?
 	    && !(!curbuf->b_p_bin
-		&& fileformat == EOL_DOS))
+		&& fileformat == EOL_DOS
+		&& *line_start == Ctrl_Z
+		&& ptr == line_start + 1))
     {
 	// remember for when writing
 	if (set_options)
 	{
 	    curbuf->b_p_eol = FALSE;
 	    if (*line_start == Ctrl_Z && ptr == line_start + 1)
-		curbuf->b_p_eof = FALSE;
+		curbuf->b_p_eof = TRUE;
 	}
 	*ptr = NUL;
 	len = (colnr_T)(ptr - line_start + 1);