changeset 20867:9c24319b4cb2 v8.2.0985

patch 8.2.0985: simplify() does not remove slashes from "///path" Commit: https://github.com/vim/vim/commit/fdcbe3c3fedf48a43b22938c9331addb2f1182f1 Author: Bram Moolenaar <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Mon, 15 Jun 2020 21:45:03 +0200
parents c5d8fe261776
children 4681dae9259a
files src/findfile.c src/testdir/test_functions.vim src/version.c
diffstat 3 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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
     {
--- 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')\<CR>\<Esc>", '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")
--- 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,