# HG changeset patch # User Bram Moolenaar # Date 1592250303 -7200 # Node ID 9c24319b4cb2bb628ef2b6011cc8d254584c9ab4 # Parent c5d8fe2617768c40dd39b9e09ff7608841149aac patch 8.2.0985: simplify() does not remove slashes from "///path" Commit: https://github.com/vim/vim/commit/fdcbe3c3fedf48a43b22938c9331addb2f1182f1 Author: Bram Moolenaar Date: Mon Jun 15 21:41:56 2020 +0200 patch 8.2.0985: simplify() does not remove slashes from "///path" Problem: Simplify() does not remove slashes from "///path". Solution: Reduce > 2 slashes to one. (closes https://github.com/vim/vim/issues/6263) diff --git a/src/findfile.c b/src/findfile.c --- a/src/findfile.c +++ b/src/findfile.c @@ -2641,6 +2641,14 @@ simplify_filename(char_u *filename) while (vim_ispathsep(*p)); } 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 { diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -463,6 +463,10 @@ func Test_simplify() call assert_equal('/', simplify('/.')) call assert_equal('/', simplify('/..')) call assert_equal('/...', simplify('/...')) + call assert_equal('//path', simplify('//path')) + call assert_equal('/path', simplify('///path')) + call assert_equal('/path', simplify('////path')) + call assert_equal('./dir/file', './dir/file'->simplify()) call assert_equal('./dir/file', simplify('.///dir//file')) call assert_equal('./dir/file', simplify('./dir/./file')) @@ -1355,6 +1359,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:') @@ -1364,6 +1369,7 @@ func Test_inputdialog() call feedkeys(":let v=inputdialog('Q:', 'xx', 'yy')\\", 'xt') call assert_equal('yy', v) endif + set timeout& timeoutlen& endfunc " Test for inputlist() @@ -1916,7 +1922,7 @@ func Test_readdirex() \ ->map({-> v:val.name}) call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt']) - " report brocken link correctly + " report broken link correctly if has("unix") call writefile([], 'Xdir/abc.txt') call system("ln -s Xdir/abc.txt Xdir/link") diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 985, +/**/ 984, /**/ 983,