summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-07-24 14:59:45 +0200
committerBram Moolenaar <Bram@vim.org>2019-07-24 14:59:45 +0200
commitd08b8c4c04db9433340df38d21f0e26878f28421 (patch)
treebed73fed41e1ce9dee8b6bb310f3d76feff5dce3
parent06029a857a3d4d90b3162090506c1e00dc84c60b (diff)
downloadvim-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.c3
-rw-r--r--src/os_unix.c5
-rw-r--r--src/testdir/test_functions.vim8
-rw-r--r--src/version.c2
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,