diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-08-09 06:57:17 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2024-08-09 07:21:59 +0800 |
commit | 336ab2682e08b95c51b8cbafcf9697b5a42026d1 (patch) | |
tree | 11d15b544bd6aeb846d13c6b237a6bb29973c530 | |
parent | a89088b7a02b70d15ccd6f17402c36f2ff7b7a81 (diff) | |
download | rneovim-336ab2682e08b95c51b8cbafcf9697b5a42026d1.tar.gz rneovim-336ab2682e08b95c51b8cbafcf9697b5a42026d1.tar.bz2 rneovim-336ab2682e08b95c51b8cbafcf9697b5a42026d1.zip |
vim-patch:8.2.4860: MS-Windows: always uses current directory for executables
Problem: MS-Windows: always uses current directory for executables.
Solution: Check the NoDefaultCurrentDirectoryInExePath environment variable.
(Yasuhiro Matsumoto, closes vim/vim#10341)
https://github.com/vim/vim/commit/05cf63e9bdca1ac070df3e7d9c6dfc45e68ac916
Omit doc change: override in later doc update.
Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
-rw-r--r-- | src/nvim/os/fs.c | 16 | ||||
-rw-r--r-- | test/old/testdir/test_functions.vim | 18 |
2 files changed, 29 insertions, 5 deletions
diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c index b681b2f832..d0da37b8e7 100644 --- a/src/nvim/os/fs.c +++ b/src/nvim/os/fs.c @@ -17,7 +17,6 @@ #endif #include "auto/config.h" -#include "nvim/errors.h" #include "nvim/os/fs.h" #include "nvim/os/os_defs.h" @@ -36,6 +35,7 @@ #include "nvim/api/private/helpers.h" #include "nvim/ascii_defs.h" +#include "nvim/errors.h" #include "nvim/gettext_defs.h" #include "nvim/globals.h" #include "nvim/log.h" @@ -356,10 +356,16 @@ static bool is_executable_in_path(const char *name, char **abspath) } #ifdef MSWIN - // Prepend ".;" to $PATH. - size_t pathlen = strlen(path_env); - char *path = memcpy(xmallocz(pathlen + 2), "." ENV_SEPSTR, 2); - memcpy(path + 2, path_env, pathlen); + char *path = NULL; + if (!os_env_exists("NoDefaultCurrentDirectoryInExePath")) { + // Prepend ".;" to $PATH. + size_t pathlen = strlen(path_env); + path = xmallocz(pathlen + 2); + memcpy(path, "." ENV_SEPSTR, 2); + memcpy(path + 2, path_env, pathlen); + } else { + path = xstrdup(path_env); + } #else char *path = xstrdup(path_env); #endif diff --git a/test/old/testdir/test_functions.vim b/test/old/testdir/test_functions.vim index 29bec72f2b..df4c6b1556 100644 --- a/test/old/testdir/test_functions.vim +++ b/test/old/testdir/test_functions.vim @@ -3578,6 +3578,24 @@ 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 + " Test for virtcol() func Test_virtcol() new |