From: Bram Moolenaar Date: Wed, 23 Dec 2020 17:54:57 +0000 (+0100) Subject: patch 8.2.2199: first write after setting 'eol' does not have NL added X-Git-Tag: v8.2.2199 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b3c8b1d25414f2e24ad03551cdf125b3e2c142b1;p=vim 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) --- diff --git a/src/bufwrite.c b/src/bufwrite.c index c6d882cd5..d7c74de35 100644 --- 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)))) { diff --git a/src/testdir/test_writefile.vim b/src/testdir/test_writefile.vim index c858b7521..f42ec14bb 100644 --- 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 diff --git a/src/version.c b/src/version.c index af89c9e30..0fadf6b93 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2199, /**/ 2198, /**/