changeset 23308:4d6c1b17f66a v8.2.2199

patch 8.2.2199: first write after setting 'eol' does not have NL added Commit: https://github.com/vim/vim/commit/b3c8b1d25414f2e24ad03551cdf125b3e2c142b1 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Dec 23 18:54:57 2020 +0100 patch 8.2.2199: first write after setting 'eol' does not have NL added Problem: First write after setting 'eol' does not have NL added. (Tom?? Janou?ek) Solution: Only use b_no_eol_lnum when doing a binary write. (closes #7535)
author Bram Moolenaar <Bram@vim.org>
date Wed, 23 Dec 2020 19:00:04 +0100
parents 74c40d38612f
children e0a6d49ed3ad
files src/bufwrite.c src/testdir/test_writefile.vim src/version.c
diffstat 3 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/bufwrite.c
+++ b/src/bufwrite.c
@@ -2031,7 +2031,7 @@ restore_backup:
 	    if (end == 0
 		    || (lnum == end
 			&& (write_bin || !buf->b_p_fixeol)
-			&& (lnum == buf->b_no_eol_lnum
+			&& ((write_bin && lnum == buf->b_no_eol_lnum)
 			    || (lnum == buf->b_ml.ml_line_count
 							   && !buf->b_p_eol))))
 	    {
--- a/src/testdir/test_writefile.vim
+++ b/src/testdir/test_writefile.vim
@@ -676,4 +676,22 @@ func Test_readwrite_file_with_bom()
   %bw!
 endfunc
 
+func Test_read_write_bin()
+  " write file missing EOL
+  call writefile(['noeol'], "XNoEolSetEol", 'bS')
+  call assert_equal(0z6E6F656F6C, readfile('XNoEolSetEol', 'B'))
+
+  " when file is read 'eol' is off
+  set ff=unix nofixeol
+  e XNoEolSetEol
+  call assert_equal(0, &eol)
+
+  " writing with 'eol' set adds the newline
+  setlocal eol
+  w
+  call assert_equal(0z6E6F656F6C0A, readfile('XNoEolSetEol', 'B'))
+
+  call delete('XNoEolSetEol')
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2199,
+/**/
     2198,
 /**/
     2197,