diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-07-24 14:59:45 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-07-24 14:59:45 +0200 |
commit | d08b8c4c04db9433340df38d21f0e26878f28421 (patch) | |
tree | bed73fed41e1ce9dee8b6bb310f3d76feff5dce3 | |
parent | 06029a857a3d4d90b3162090506c1e00dc84c60b (diff) | |
download | vim-git-d08b8c4c04db9433340df38d21f0e26878f28421.tar.gz |
patch 8.1.1740: exepath() doesn't work for "bin/cat"v8.1.1740
Problem: Exepath() doesn't work for "bin/cat".
Solution: Check for any path separator. (Daniel Hahler, closes #4724,
closes #4710)
-rw-r--r-- | src/evalfunc.c | 3 | ||||
-rw-r--r-- | src/os_unix.c | 5 | ||||
-rw-r--r-- | src/testdir/test_functions.vim | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 13 insertions, 5 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c index 3fbeec26c..8b9fba02c 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -3058,8 +3058,7 @@ f_executable(typval_T *argvars, typval_T *rettv) char_u *name = tv_get_string(&argvars[0]); /* Check in $PATH and also check directly if there is a directory name. */ - rettv->vval.v_number = mch_can_exe(name, NULL, TRUE) - || (gettail(name) != name && mch_can_exe(name, NULL, FALSE)); + rettv->vval.v_number = mch_can_exe(name, NULL, TRUE); } static garray_T redir_execute_ga; diff --git a/src/os_unix.c b/src/os_unix.c index a15d66057..6387a7757 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3103,12 +3103,11 @@ mch_can_exe(char_u *name, char_u **path, int use_path) /* When "use_path" is false and if it's an absolute or relative path don't * need to use $PATH. */ - if (!use_path || mch_isFullName(name) || (name[0] == '.' - && (name[1] == '/' || (name[1] == '.' && name[2] == '/')))) + if (!use_path || gettail(name) != name) { /* There must be a path separator, files in the current directory * can't be executed. */ - if (gettail(name) != name && executable_file(name)) + if ((use_path || gettail(name) != name) && executable_file(name)) { if (path != NULL) { diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index 9199ba7ce..1833113b8 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -990,6 +990,14 @@ func Test_Executable() elseif has('unix') call assert_equal(1, executable('cat')) call assert_equal(0, executable('nodogshere')) + + " get "cat" path and remove the leading / + let catcmd = exepath('cat')[1:] + new + lcd / + call assert_equal(1, executable(catcmd)) + call assert_equal('/' .. catcmd, exepath(catcmd)) + bwipe endif endfunc diff --git a/src/version.c b/src/version.c index cc86468e6..e25be558e 100644 --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1740, +/**/ 1739, /**/ 1738, |