From be12a69b9edfbbb091450a42a4408bc5579d1d27 Mon Sep 17 00:00:00 2001 From: Qian Hong Date: Sun, 26 Jul 2015 17:55:01 +0800 Subject: kernel32: Fallback to default comspec when %COMSPEC% is not set. --- dlls/kernel32/process.c | 6 +++++- programs/cmd/wcmdmain.c | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c index b0c06e3..caa005c 100644 --- a/dlls/kernel32/process.c +++ b/dlls/kernel32/process.c @@ -2174,13 +2174,17 @@ static BOOL create_cmd_process( LPCWSTR filename, LPWSTR cmd_line, LPVOID env, L { static const WCHAR comspecW[] = {'C','O','M','S','P','E','C',0}; + static const WCHAR cmdW[] = {'\\','c','m','d','.','e','x','e',0}; static const WCHAR slashcW[] = {' ','/','c',' ',0}; WCHAR comspec[MAX_PATH]; WCHAR *newcmdline; BOOL ret; if (!GetEnvironmentVariableW( comspecW, comspec, sizeof(comspec)/sizeof(WCHAR) )) - return FALSE; + { + GetSystemDirectoryW( comspec, (sizeof(comspec) - sizeof(cmdW))/sizeof(WCHAR) ); + strcatW( comspec, cmdW ); + } if (!(newcmdline = HeapAlloc( GetProcessHeap(), 0, (strlenW(comspec) + 4 + strlenW(cmd_line) + 1) * sizeof(WCHAR)))) return FALSE; diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 7666329..b0ec82f 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -2340,10 +2340,20 @@ int wmain (int argc, WCHAR *argvW[]) static const WCHAR offW[] = {'O','F','F','\0'}; static const WCHAR promptW[] = {'P','R','O','M','P','T','\0'}; static const WCHAR defaultpromptW[] = {'$','P','$','G','\0'}; + static const WCHAR comspecW[] = {'C','O','M','S','P','E','C',0}; + static const WCHAR cmdW[] = {'\\','c','m','d','.','e','x','e',0}; + WCHAR comspec[MAX_PATH]; CMD_LIST *toExecute = NULL; /* Commands left to be executed */ OSVERSIONINFOW osv; char osver[50]; + if (!GetEnvironmentVariableW(comspecW, comspec, sizeof(comspec)/sizeof(WCHAR))) + { + GetSystemDirectoryW(comspec, (sizeof(comspec) - sizeof(cmdW))/sizeof(WCHAR)); + strcatW(comspec, cmdW); + SetEnvironmentVariableW(comspecW, comspec); + } + srand(time(NULL)); /* Get the windows version being emulated */ -- 2.5.0