make win32_spawnvp() inherit standard handles even when they
Gurusamy Sarathy [Thu, 27 May 1999 03:56:20 +0000 (03:56 +0000)]
may be redirected

p4raw-id: //depot/perl@3487

win32/win32.c

index f4c7006..9361191 100644 (file)
@@ -2364,7 +2364,23 @@ win32_spawnvp(int mode, const char *cmdname, const char *const *argv)
     }
     memset(&StartupInfo,0,sizeof(StartupInfo));
     StartupInfo.cb = sizeof(StartupInfo);
-    StartupInfo.wShowWindow = SW_SHOWDEFAULT;
+    StartupInfo.hStdInput  = GetStdHandle(STD_INPUT_HANDLE);
+    StartupInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
+    StartupInfo.hStdError  = GetStdHandle(STD_ERROR_HANDLE);
+    if (StartupInfo.hStdInput != INVALID_HANDLE_VALUE &&
+       StartupInfo.hStdOutput != INVALID_HANDLE_VALUE &&
+       StartupInfo.hStdError != INVALID_HANDLE_VALUE)
+    {
+       StartupInfo.dwFlags |= STARTF_USESTDHANDLES;
+    }
+    else {
+       create |= CREATE_NEW_CONSOLE;
+    }
+
+#ifndef DEBUGGING
+    StartupInfo.dwFlags |= STARTF_USESHOWWINDOW;
+    StartupInfo.wShowWindow = SW_HIDE;
+#endif
 
 RETRY:
     if (!CreateProcess(cmdname,                /* search PATH to find executable */