summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-02-10 22:06:32 +0100
committerBram Moolenaar <Bram@vim.org>2020-02-10 22:06:32 +0100
commit355757aed6ae2ae5446882570d89f243e4805937 (patch)
treeab4881042a9f6d88c7344394f9df8885d6024404
parentb3e195cca7b3201b188c1713b64012b1bef4f61f (diff)
patch 8.2.0239: MS-Windows: 'env' job option does not override existing varsv8.2.0239
Problem: MS-Windows: 'env' job option does not override existing environment variables. (Tim Pope) Solution: Set the environment variables later. (Yasuhiro Matsumoto, closes #5485, closes #5608)
-rw-r--r--src/os_win32.c36
-rw-r--r--src/testdir/test_channel.vim9
-rw-r--r--src/version.c2
3 files changed, 29 insertions, 18 deletions
diff --git a/src/os_win32.c b/src/os_win32.c
index 2594aeea56..f394979d60 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -4948,24 +4948,6 @@ win32_build_env(dict_T *env, garray_T *gap, int is_terminal)
if (ga_grow(gap, 1) == FAIL)
return;
- if (base)
- {
- WCHAR *p = (WCHAR*) base;
-
- // for last \0
- if (ga_grow(gap, 1) == FAIL)
- return;
-
- while (*p != 0 || *(p + 1) != 0)
- {
- if (ga_grow(gap, 1) == OK)
- *((WCHAR*)gap->ga_data + gap->ga_len++) = *p;
- p++;
- }
- FreeEnvironmentStrings(base);
- *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
- }
-
if (env != NULL)
{
for (hi = env->dv_hashtab.ht_array; todo > 0; ++hi)
@@ -4997,6 +4979,24 @@ win32_build_env(dict_T *env, garray_T *gap, int is_terminal)
}
}
+ if (base)
+ {
+ WCHAR *p = (WCHAR*) base;
+
+ // for last \0
+ if (ga_grow(gap, 1) == FAIL)
+ return;
+
+ while (*p != 0 || *(p + 1) != 0)
+ {
+ if (ga_grow(gap, 1) == OK)
+ *((WCHAR*)gap->ga_data + gap->ga_len++) = *p;
+ p++;
+ }
+ FreeEnvironmentStrings(base);
+ *((WCHAR*)gap->ga_data + gap->ga_len++) = L'\0';
+ }
+
# if defined(FEAT_CLIENTSERVER) || defined(FEAT_TERMINAL)
{
# ifdef FEAT_CLIENTSERVER
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index ebcd76e0ff..16fe5c7829 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -2006,3 +2006,12 @@ func Test_issue_5150()
sleep 10m
call assert_equal(-1, job_info(g:job).exitval)
endfunc
+
+func Test_issue_5485()
+ let $VAR1 = 'global'
+ let g:Ch_reply = ""
+ let l:job = job_start([&shell, &shellcmdflag, has('win32') ? 'echo %VAR1% %VAR2%' : 'echo $VAR1 $VAR2'], {'env': {'VAR1': 'local', 'VAR2': 'local'}, 'callback': 'Ch_handler'})
+ let g:Ch_job = l:job
+ call WaitForAssert({-> assert_equal("local local", trim(g:Ch_reply))})
+ unlet $VAR1
+endfunc
diff --git a/src/version.c b/src/version.c
index 61a9f958a4..cf96f40514 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 239,
+/**/
238,
/**/
237,