msvcrt: Fix passing of explicit environment to spawn/exec calls

Ron Yorston rmy at tigress.co.uk
Wed Nov 26 11:29:08 CST 2014


Explicit sets of environment variables passed to spawn/exec are
consistently converted to wide character environment blocks.  Because
CREATE_UNICODE_ENVIRONMENT isn't included in the process creation flags
the environment block is incorrectly passed through another conversion
to wide characters in create_process_impl.
---
 dlls/msvcrt/process.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/dlls/msvcrt/process.c b/dlls/msvcrt/process.c
index b782727..9ff7dba 100644
--- a/dlls/msvcrt/process.c
+++ b/dlls/msvcrt/process.c
@@ -134,6 +134,7 @@ static MSVCRT_intptr_t msvcrt_spawn(int flags, const MSVCRT_wchar_t* exe, MSVCRT
   STARTUPINFOW si;
   PROCESS_INFORMATION pi;
   MSVCRT_wchar_t fullname[MAX_PATH];
+  DWORD flg;
 
   TRACE("%x %s %s %s %d\n", flags, debugstr_w(exe), debugstr_w(cmdline), debugstr_w(env), use_path);
 
@@ -148,8 +149,9 @@ static MSVCRT_intptr_t msvcrt_spawn(int flags, const MSVCRT_wchar_t* exe, MSVCRT
   memset(&si, 0, sizeof(si));
   si.cb = sizeof(si);
   msvcrt_create_io_inherit_block(&si.cbReserved2, &si.lpReserved2);
-  if (!CreateProcessW(fullname, cmdline, NULL, NULL, TRUE,
-                     flags == MSVCRT__P_DETACH ? DETACHED_PROCESS : 0,
+  flg = flags == MSVCRT__P_DETACH ? DETACHED_PROCESS : 0;
+  flg |= env ? CREATE_UNICODE_ENVIRONMENT : 0;
+  if (!CreateProcessW(fullname, cmdline, NULL, NULL, TRUE, flg,
                      env, NULL, &si, &pi))
   {
     msvcrt_set_errno(GetLastError());
-- 
1.7.1




More information about the wine-patches mailing list