commit 336ab2682e08b95c51b8cbafcf9697b5a42026d1
parent a89088b7a02b70d15ccd6f17402c36f2ff7b7a81
Author: zeertzjq <zeertzjq@outlook.com>
Date: Fri, 9 Aug 2024 06:57:17 +0800
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>
Diffstat:
2 files changed, 29 insertions(+), 5 deletions(-)
diff --git 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
@@ -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