aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2021-10-17 22:04:53 +0800
committerzeertzjq <zeertzjq@outlook.com>2021-10-17 22:04:53 +0800
commit57651df9c11740a24a2f71801d9b7b81b894d601 (patch)
treefe98c51fc2a7a9eca057ca112e5e16048f2eed0e /src
parente91dee5c21ffca22ac821336ad23bce6339b5f7c (diff)
downloadrneovim-57651df9c11740a24a2f71801d9b7b81b894d601.tar.gz
rneovim-57651df9c11740a24a2f71801d9b7b81b894d601.tar.bz2
rneovim-57651df9c11740a24a2f71801d9b7b81b894d601.zip
vim-patch:8.1.0604: autocommand test fails on MS-Windows
Problem: Autocommand test fails on MS-Windows. Solution: Use pathcmp() instead of strcmp() to check if a directory differs. https://github.com/vim/vim/commit/9eb76af451ddd8eaad0cd5dd629f18c4f4035171
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ex_docmd.c2
-rw-r--r--src/nvim/file_search.c19
-rw-r--r--src/nvim/window.c5
3 files changed, 15 insertions, 11 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index b81aab9ffe..cc30557ead 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -7811,7 +7811,7 @@ void ex_cd(exarg_T *eap)
break;
}
- bool dir_differs = prev_dir == NULL || STRCMP(prev_dir, new_dir) != 0;
+ bool dir_differs = prev_dir == NULL || pathcmp((char *)prev_dir, (char *)new_dir, -1) != 0;
if (dir_differs && vim_chdir(new_dir)) {
EMSG(_(e_failed));
} else {
diff --git a/src/nvim/file_search.c b/src/nvim/file_search.c
index e7c4785beb..22c7b35fa9 100644
--- a/src/nvim/file_search.c
+++ b/src/nvim/file_search.c
@@ -1620,6 +1620,13 @@ void do_autocmd_dirchanged(char *new_dir, CdScope scope, CdCause cause)
abort();
}
+#ifdef BACKSLASH_IN_FILENAME
+ char new_dir_buf[MAXPATHL];
+ STRCPY(new_dir_buf, new_dir);
+ slash_adjust(new_dir_buf);
+ new_dir = new_dir_buf;
+#endif
+
tv_dict_add_str(dict, S_LEN("scope"), buf); // -V614
tv_dict_add_str(dict, S_LEN("cwd"), new_dir);
tv_dict_add_bool(dict, S_LEN("changed_window"), cause == kCdCauseWindow);
@@ -1659,14 +1666,10 @@ int vim_chdirfile(char_u *fname, CdCause cause)
NameBuff[0] = NUL;
}
- if (os_chdir(dir) != 0) {
- return FAIL;
- }
-
-#ifdef BACKSLASH_IN_FILENAME
- slash_adjust((char_u *)dir);
-#endif
- if (cause != kCdCauseOther && !strequal(dir, (char *)NameBuff)) {
+ if (cause != kCdCauseOther && pathcmp(dir, (char *)NameBuff, -1) != 0) {
+ if (os_chdir(dir) != 0) {
+ return FAIL;
+ }
do_autocmd_dirchanged(dir, kCdScopeWindow, cause);
}
diff --git a/src/nvim/window.c b/src/nvim/window.c
index a7470889b3..49d7c9c9f5 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -23,6 +23,7 @@
#include "nvim/fold.h"
#include "nvim/garray.h"
#include "nvim/getchar.h"
+#include "nvim/globals.h"
#include "nvim/hashtab.h"
#include "nvim/main.h"
#include "nvim/mark.h"
@@ -4540,7 +4541,7 @@ static void win_enter_ext(win_T *const wp, const int flags)
}
}
if (os_chdir(new_dir) == 0) {
- if (!p_acd && !strequal(new_dir, cwd)) {
+ if (!p_acd && pathcmp(new_dir, cwd, -1) != 0) {
do_autocmd_dirchanged(new_dir, curwin->w_localdir
? kCdScopeWindow : kCdScopeTab, kCdCauseWindow);
}
@@ -4550,7 +4551,7 @@ static void win_enter_ext(win_T *const wp, const int flags)
// Window doesn't have a local directory and we are not in the global
// directory: Change to the global directory.
if (os_chdir((char *)globaldir) == 0) {
- if (!p_acd && !strequal((char *)globaldir, cwd)) {
+ if (!p_acd && pathcmp((char *)globaldir, cwd, -1) != 0) {
do_autocmd_dirchanged((char *)globaldir, kCdScopeGlobal, kCdCauseWindow);
}
}