- Don't try to free the returned buffer from getenv.    
- Split the path correctly from shell command.
Modified: trunk/reactos/lib/crt/process/_system.c

Modified: trunk/reactos/lib/crt/process/_system.c
--- trunk/reactos/lib/crt/process/_system.c	2005-08-09 15:41:10 UTC (rev 17239)
+++ trunk/reactos/lib/crt/process/_system.c	2005-08-09 15:44:54 UTC (rev 17240)
@@ -47,15 +47,11 @@
 
   if (szComSpec == NULL)
   {
-    szComSpec = _strdup("cmd.exe");
-    if (szComSpec == NULL)
-    {
-       __set_errno(ENOMEM);
-       return -1;
-    }
+    szComSpec = "cmd.exe";
   }
 
-  s = max(strchr(szComSpec, '\\'), strchr(szComSpec, '/'));
+  /* split the path from shell command */
+  s = max(strrchr(szComSpec, '\\'), strrchr(szComSpec, '/'));
   if (s == NULL)
     s = szComSpec;
   else
@@ -64,7 +60,6 @@
   szCmdLine = malloc(strlen(s) + 4 + strlen(command) + 1);
   if (szCmdLine == NULL)
   {
-     free (szComSpec);
      __set_errno(ENOMEM);
      return -1;
   }
@@ -81,7 +76,7 @@
   memset (&StartupInfo, 0, sizeof(StartupInfo));
   StartupInfo.cb = sizeof(StartupInfo);
   StartupInfo.lpReserved= NULL;
-  StartupInfo.dwFlags = 0;
+  StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
   StartupInfo.wShowWindow = SW_SHOWDEFAULT;
   StartupInfo.lpReserved2 = NULL;
   StartupInfo.cbReserved2 = 0;
@@ -98,13 +93,12 @@
 			  NULL,
 			  NULL,
 			  TRUE,
-			  0,
+			  CREATE_NEW_PROCESS_GROUP,
 			  NULL,
 			  NULL,
 			  &StartupInfo,
 			  &ProcessInformation);
   free(szCmdLine);
-  free(szComSpec);
 
   if (result == FALSE)
   {