neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 4bb6cd4c2d34d9ddde1999a2b8cb366dd9fd3e4a
parent dd61be59af5bb97f2f28ec0040ab1597795a48c5
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Wed, 17 Jul 2024 09:48:39 +0800

vim-patch:8.2.3543: swapname has double slash when 'directory' ends in it

Problem:    Swapname has double slash when 'directory' ends in double slash.
            (Shane Smith)
Solution:   Remove the superfluous slash. (closes vim/vim#8876)

https://github.com/vim/vim/commit/8b0e62c93b6dad5ec5b2c7558d4f7b78c46216d2

Co-authored-by: Bram Moolenaar <Bram@vim.org>

Diffstat:
Msrc/nvim/bufwrite.c | 6------
Msrc/nvim/memline.c | 7++++++-
2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/src/nvim/bufwrite.c b/src/nvim/bufwrite.c @@ -822,9 +822,6 @@ static int buf_write_make_backup(char *fname, bool append, FileInfo *file_info_o size_t dir_len = copy_option_part(&dirp, IObuff, IOSIZE, ","); char *p = IObuff + dir_len; bool trailing_pathseps = after_pathsep(IObuff, p) && p[-1] == p[-2]; - if (trailing_pathseps) { - IObuff[dir_len - 2] = NUL; - } if (*dirp == NUL && !os_isdir(IObuff)) { int ret; char *failed_dir; @@ -964,9 +961,6 @@ nobackup: size_t dir_len = copy_option_part(&dirp, IObuff, IOSIZE, ","); char *p = IObuff + dir_len; bool trailing_pathseps = after_pathsep(IObuff, p) && p[-1] == p[-2]; - if (trailing_pathseps) { - IObuff[dir_len - 2] = NUL; - } if (*dirp == NUL && !os_isdir(IObuff)) { int ret; char *failed_dir; diff --git a/src/nvim/memline.c b/src/nvim/memline.c @@ -1440,7 +1440,10 @@ int recover_names(char *fname, bool do_list, list_T *ret_list, int nr, char **fn /// Append the full path to name with path separators made into percent /// signs, to dir. An unnamed buffer is handled as "" (<currentdir>/"") -char *make_percent_swname(const char *dir, const char *name) +/// signs, to "dir". An unnamed buffer is handled as "" (<currentdir>/"") +/// The last character in "dir" must be an extra slash or backslash, it is +/// removed. +char *make_percent_swname(char *dir, const char *name) FUNC_ATTR_NONNULL_ARG(1) { char *d = NULL; @@ -1455,6 +1458,8 @@ char *make_percent_swname(const char *dir, const char *name) *d = '%'; } } + + dir[strlen(dir) - 1] = NUL; // remove one trailing slash d = concat_fnames(dir, s, true); xfree(s); xfree(f);