]> granicus.if.org Git - vim/commitdiff
patch 8.2.4060: win_execute() slow on systems where getcwd()/chdir() is slow v8.2.4060
authorBram Moolenaar <Bram@vim.org>
Tue, 11 Jan 2022 12:37:20 +0000 (12:37 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 11 Jan 2022 12:37:20 +0000 (12:37 +0000)
Problem:    win_execute() is slow on systems where getcwd() or chdir() is
            slow. (Rick Howe)
Solution:   Avoid using getcwd() and chdir() if no local directory is used and
            'acd' is not set. (closes #9504)

src/evalwindow.c
src/version.c

index f2d9a0b4448d7d9d0dc73c98afc5f4969e68c489..a47a0c0470036c1b168e6b1e122f0b11f83bd8ea 100644 (file)
@@ -707,13 +707,26 @@ f_win_execute(typval_T *argvars, typval_T *rettv)
     {
        pos_T   curpos = wp->w_cursor;
        char_u  cwd[MAXPATHL];
-       int     cwd_status;
+       int     cwd_status = FAIL;
 #ifdef FEAT_AUTOCHDIR
        char_u  autocwd[MAXPATHL];
        int     apply_acd = FALSE;
 #endif
 
-       cwd_status = mch_dirname(cwd, MAXPATHL);
+       // Getting and setting directory can be slow on some systems, only do
+       // this when the current or target window/tab have a local directory or
+       // 'acd' is set.
+       if (curwin != wp
+               && (curwin->w_localdir != NULL
+                   || wp->w_localdir != NULL
+                   || (curtab != tp
+                       && (curtab->tp_localdir != NULL
+                           || tp->tp_localdir != NULL))
+#ifdef FEAT_AUTOCHDIR
+                   || p_acd
+#endif
+                   ))
+           cwd_status = mch_dirname(cwd, MAXPATHL);
 
 #ifdef FEAT_AUTOCHDIR
        // If 'acd' is set, check we are using that directory.  If yes, then
index 27f63212a97133f4dbbcee504f0935ad5b2c97e7..d1c88fce4f5fd48a2733771b2b990b30a86977a3 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4060,
 /**/
     4059,
 /**/