[project @ 2005-03-18 17:28:08 by krasimir]
authorkrasimir <unknown>
Fri, 18 Mar 2005 17:28:08 +0000 (17:28 +0000)
committerkrasimir <unknown>
Fri, 18 Mar 2005 17:28:08 +0000 (17:28 +0000)
HACK: The redirection of standard handles under Windows is a little bit tricky
because we have to take in account that the application can be GUI.
The commit affects only Windows GUI applications.

MERGE TO STABLE

cbits/runProcess.c

index 82fa97e..b4a7557 100644 (file)
@@ -401,15 +401,26 @@ runProcess (char *cmd, char *workingDirectory, void *environment,
        STARTUPINFO sInfo;\r
        PROCESS_INFORMATION pInfo;\r
        DWORD flags;\r
+       char buffer[256];\r
 \r
        ZeroMemory(&sInfo, sizeof(sInfo));\r
-       sInfo.cb = sizeof(sInfo);\r
-       sInfo.dwFlags = STARTF_USESTDHANDLES;\r
+       sInfo.cb = sizeof(sInfo);       \r
        sInfo.hStdInput = (HANDLE) _get_osfhandle(fdStdInput);\r
        sInfo.hStdOutput= (HANDLE) _get_osfhandle(fdStdOutput);\r
        sInfo.hStdError = (HANDLE) _get_osfhandle(fdStdError);\r
 \r
-       if (sInfo.hStdOutput != GetStdHandle(STD_OUTPUT_HANDLE) &&\r
+       if (sInfo.hStdInput == INVALID_HANDLE_VALUE)\r
+               sInfo.hStdInput = NULL;\r
+       if (sInfo.hStdOutput == INVALID_HANDLE_VALUE)\r
+               sInfo.hStdOutput = NULL;\r
+       if (sInfo.hStdError == INVALID_HANDLE_VALUE)\r
+               sInfo.hStdError = NULL;\r
+\r
+       if (sInfo.hStdInput || sInfo.hStdOutput || sInfo.hStdError)\r
+               sInfo.dwFlags = STARTF_USESTDHANDLES;\r
+\r
+       if (sInfo.hStdInput  != GetStdHandle(STD_INPUT_HANDLE)  &&\r
+           sInfo.hStdOutput != GetStdHandle(STD_OUTPUT_HANDLE) &&\r
            sInfo.hStdError  != GetStdHandle(STD_ERROR_HANDLE))\r
                flags = CREATE_NO_WINDOW;   // Run without console window only when both output and error are redirected\r
        else\r