aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-10-13 19:11:53 +0800
committerGitHub <noreply@github.com>2024-10-13 19:11:53 +0800
commit36890824c7edb7bc5458062c14efbfa0b1d280b5 (patch)
tree83d50aa726d6fa33ece54cab947101578bc68411
parent2d24558c285198d2e725c83a8c4ad4d90797c950 (diff)
parent73309048cf160dc7a89242cacdf278448ae17e7b (diff)
downloadrneovim-36890824c7edb7bc5458062c14efbfa0b1d280b5.tar.gz
rneovim-36890824c7edb7bc5458062c14efbfa0b1d280b5.tar.bz2
rneovim-36890824c7edb7bc5458062c14efbfa0b1d280b5.zip
Merge pull request #30798 from zeertzjq/vim-8.2.0985
vim-patch:8.2.{0985,0986}: simplify() does not remove slashes from "///path"
-rw-r--r--src/nvim/path.c7
-rw-r--r--test/old/testdir/test_functions.vim8
2 files changed, 15 insertions, 0 deletions
diff --git a/src/nvim/path.c b/src/nvim/path.c
index 4c16adde4c..80890acb7d 100644
--- a/src/nvim/path.c
+++ b/src/nvim/path.c
@@ -1538,6 +1538,13 @@ void simplify_filename(char *filename)
} while (vim_ispathsep(*p));
}
char *start = p; // remember start after "c:/" or "/" or "///"
+#ifdef UNIX
+ // Posix says that "//path" is unchanged but "///path" is "/path".
+ if (start > filename + 2) {
+ STRMOVE(filename + 1, p);
+ start = p = filename + 1;
+ }
+#endif
do {
// At this point "p" is pointing to the char following a single "/"
diff --git a/test/old/testdir/test_functions.vim b/test/old/testdir/test_functions.vim
index 143fdc8073..d22ff826f9 100644
--- a/test/old/testdir/test_functions.vim
+++ b/test/old/testdir/test_functions.vim
@@ -383,6 +383,12 @@ func Test_simplify()
call assert_equal('/', simplify('/.'))
call assert_equal('/', simplify('/..'))
call assert_equal('/...', simplify('/...'))
+ call assert_equal('//path', simplify('//path'))
+ if has('unix')
+ call assert_equal('/path', simplify('///path'))
+ call assert_equal('/path', simplify('////path'))
+ endif
+
call assert_equal('./dir/file', './dir/file'->simplify())
call assert_equal('./dir/file', simplify('.///dir//file'))
call assert_equal('./dir/file', simplify('./dir/./file'))
@@ -2069,6 +2075,7 @@ endfunc
" Test for the inputdialog() function
func Test_inputdialog()
+ set timeout timeoutlen=10
if has('gui_running')
call assert_fails('let v=inputdialog([], "xx")', 'E730:')
call assert_fails('let v=inputdialog("Q", [])', 'E730:')
@@ -2078,6 +2085,7 @@ func Test_inputdialog()
call feedkeys(":let v=inputdialog('Q:', 'xx', 'yy')\<CR>\<Esc>", 'xt')
call assert_equal('yy', v)
endif
+ set timeout& timeoutlen&
endfunc
" Test for inputlist()