summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <mattn.jp@gmail.com>2022-05-03 11:02:28 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-03 11:02:28 +0100
commit05cf63e9bdca1ac070df3e7d9c6dfc45e68ac916 (patch)
tree449168068b07a9bb8a6d12b935a0d67ad7506b0e
parent3a974a89331182139e12386275f052a50c247ecb (diff)
downloadvim-git-05cf63e9bdca1ac070df3e7d9c6dfc45e68ac916.tar.gz
patch 8.2.4860: MS-Windows: always uses current directory for executablesv8.2.4860
Problem: MS-Windows: always uses current directory for executables. Solution: Check the NoDefaultCurrentDirectoryInExePath environment variable. (Yasuhiro Matsumoto, closes #10341)
-rw-r--r--runtime/doc/builtin.txt6
-rw-r--r--src/os_win32.c6
-rw-r--r--src/testdir/test_functions.vim18
-rw-r--r--src/version.c2
4 files changed, 29 insertions, 3 deletions
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 1b091b16f..beeb73649 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -2016,8 +2016,10 @@ executable({expr}) *executable()*
On MS-Windows it only checks if the file exists and is not a
directory, not if it's really executable.
On MS-Windows an executable in the same directory as Vim is
- always found. Since this directory is added to $PATH it
- should also work to execute it |win32-PATH|.
+ normally found. Since this directory is added to $PATH it
+ should also work to execute it |win32-PATH|. This can be
+ disabled by setting the $NoDefaultCurrentDirectoryInExePath
+ environment variable. *NoDefaultCurrentDirectoryInExePath*
The result is a Number:
1 exists
0 does not exist
diff --git a/src/os_win32.c b/src/os_win32.c
index 53107d530..97595d6eb 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -2237,7 +2237,11 @@ executable_exists(char *name, char_u **path, int use_path, int use_pathext)
retval = FALSE;
goto theend;
}
- STRCPY(pathbuf, ".;");
+
+ if (mch_getenv("NoDefaultCurrentDirectoryInExePath") == NULL)
+ STRCPY(pathbuf, ".;");
+ else
+ *pathbuf = NUL;
STRCAT(pathbuf, p);
}
}
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index a1b9b3d26..87b3844f2 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -2906,4 +2906,22 @@ func Test_isabsolutepath()
endif
endfunc
+" Test for exepath()
+func Test_exepath()
+ if has('win32')
+ call assert_notequal(exepath('cmd'), '')
+
+ let oldNoDefaultCurrentDirectoryInExePath = $NoDefaultCurrentDirectoryInExePath
+ call writefile(['@echo off', 'echo Evil'], 'vim-test-evil.bat')
+ let $NoDefaultCurrentDirectoryInExePath = ''
+ call assert_notequal(exepath("vim-test-evil.bat"), '')
+ let $NoDefaultCurrentDirectoryInExePath = '1'
+ call assert_equal(exepath("vim-test-evil.bat"), '')
+ let $NoDefaultCurrentDirectoryInExePath = oldNoDefaultCurrentDirectoryInExePath
+ call delete('vim-test-evil.bat')
+ else
+ call assert_notequal(exepath('sh'), '')
+ endif
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 5cbdf3f61..c3ecb6255 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4860,
+/**/
4859,
/**/
4858,