diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-02-10 22:06:32 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-02-10 22:06:32 +0100 |
commit | 355757aed6ae2ae5446882570d89f243e4805937 (patch) | |
tree | ab4881042a9f6d88c7344394f9df8885d6024404 /src | |
parent | b3e195cca7b3201b188c1713b64012b1bef4f61f (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)
Diffstat (limited to 'src')
-rw-r--r-- | src/os_win32.c | 36 | ||||
-rw-r--r-- | src/testdir/test_channel.vim | 9 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |