forked from aniani/vim
patch 8.2.0239: MS-Windows: 'env' job option does not override existing vars
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)
This commit is contained in:
@@ -4948,24 +4948,6 @@ win32_build_env(dict_T *env, garray_T *gap, int is_terminal)
|
|||||||
if (ga_grow(gap, 1) == FAIL)
|
if (ga_grow(gap, 1) == FAIL)
|
||||||
return;
|
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)
|
if (env != NULL)
|
||||||
{
|
{
|
||||||
for (hi = env->dv_hashtab.ht_array; todo > 0; ++hi)
|
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)
|
# if defined(FEAT_CLIENTSERVER) || defined(FEAT_TERMINAL)
|
||||||
{
|
{
|
||||||
# ifdef FEAT_CLIENTSERVER
|
# ifdef FEAT_CLIENTSERVER
|
||||||
|
@@ -2006,3 +2006,12 @@ func Test_issue_5150()
|
|||||||
sleep 10m
|
sleep 10m
|
||||||
call assert_equal(-1, job_info(g:job).exitval)
|
call assert_equal(-1, job_info(g:job).exitval)
|
||||||
endfunc
|
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
|
||||||
|
@@ -742,6 +742,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
239,
|
||||||
/**/
|
/**/
|
||||||
238,
|
238,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user