0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 9.0.0826: if 'endofline' is set CTRL-Z may be written in a wrong place

Problem:    If 'endofline' is set the CTRL-Z may be written in the wrong
            place.
Solution:   Write CTRL-Z at the end of the file.  Update the help to explain
            the possibilities better. (Ken Takata, closes #11486)
This commit is contained in:
K.Takata
2022-11-01 20:36:19 +00:00
committed by Bram Moolenaar
parent 8e0ccb6bc2
commit 3af982196b
6 changed files with 136 additions and 19 deletions

View File

@@ -2271,27 +2271,32 @@ failed:
if (error && read_count == 0)
error = FALSE;
/*
* If we get EOF in the middle of a line, note the fact and
* complete the line ourselves.
* In Dos format ignore a trailing CTRL-Z, unless 'binary' set.
*/
// In Dos format ignore a trailing CTRL-Z, unless 'binary' is set.
// In old days the file length was in sector count and the CTRL-Z the
// marker where the file really ended. Assuming we write it to a file
// system that keeps file length properly the CTRL-Z should be dropped.
// Set the 'endoffile' option so the user can decide what to write later.
// In Unix format the CTRL-Z is just another character.
if (linerest != 0
&& !curbuf->b_p_bin
&& fileformat == EOL_DOS
&& ptr[-1] == Ctrl_Z)
{
ptr--;
linerest--;
if (set_options)
curbuf->b_p_eof = TRUE;
}
// If we get EOF in the middle of a line, note the fact by resetting
// 'endofline' and add the line normally.
if (!error
&& !got_int
&& linerest != 0
// TODO: should we handle CTRL-Z differently here for 'endoffile'?
&& !(!curbuf->b_p_bin
&& fileformat == EOL_DOS
&& *line_start == Ctrl_Z
&& ptr == line_start + 1))
&& linerest != 0)
{
// 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 = TRUE;
}
*ptr = NUL;
len = (colnr_T)(ptr - line_start + 1);
if (ml_append(lnum, line_start, len, newfile) == FAIL)