updated for version 7.3.124
Problem:    When writing a file in binary mode it may be missing the final EOL
            if a file previously read was missing the EOL. (Kevin Goodsell)
Solution:   Move the write_no_eol_lnum into the buffer struct.
diff --git a/src/os_unix.c b/src/os_unix.c
index 0234f90..b227c8e 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -4245,7 +4245,7 @@
 				 * should not have one. */
 				if (lnum != curbuf->b_op_end.lnum
 					|| !curbuf->b_p_bin
-					|| (lnum != write_no_eol_lnum
+					|| (lnum != curbuf->b_no_eol_lnum
 					    && (lnum !=
 						    curbuf->b_ml.ml_line_count
 						    || curbuf->b_p_eol)))
@@ -4588,10 +4588,10 @@
 		    {
 			append_ga_line(&ga);
 			/* remember that the NL was missing */
-			write_no_eol_lnum = curwin->w_cursor.lnum;
+			curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
 		    }
 		    else
-			write_no_eol_lnum = 0;
+			curbuf->b_no_eol_lnum = 0;
 		    ga_clear(&ga);
 		}