From be12a69b9edfbbb091450a42a4408bc5579d1d27 Mon Sep 17 00:00:00 2001
From: Qian Hong <qhong@codeweavers.com>
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

