]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
fix stdout, stderr if compiler failed
authorleanid <leanid.chaika@gmail.com>
Fri, 5 Dec 2014 10:44:03 +0000 (13:44 +0300)
committerJoel Rosdahl <joel@rosdahl.net>
Wed, 28 Jan 2015 21:33:48 +0000 (22:33 +0100)
ccache.h
execute.c

index 4dc94ee7282429f5462edc1000b7b976b67d9f24..174e582214f44ad914db1b2d4912f3292a3831df 100644 (file)
--- a/ccache.h
+++ b/ccache.h
@@ -261,7 +261,7 @@ void add_exe_ext_if_no_to_fullpath(char *full_path_win_ext, size_t max_size,
 #    define mkdir(a,b) mkdir(a)
 #    define link(src,dst) (CreateHardLink(dst,src,NULL) ? 0 : -1)
 #    define lstat(a,b) stat(a,b)
-#    define execv(a,b) win32execute(a,b,0,0,0)
+#    define execv(a,b) win32execute(a,b,0,-1,-1)
 #    define execute(a,b,c) win32execute(*(a),a,1,b,c)
 #    define PATH_DELIM ";"
 #    define F_RDLCK 0
index 5af0cf3e2427d47fe2ea11eb802b86e916abe646..f4430497eea90ee1a2633ea2df29bcb49b4d6377 100644 (file)
--- a/execute.c
+++ b/execute.c
@@ -152,6 +152,17 @@ win32execute(char *path, char **argv, int doreturn,
                si.hStdOutput = (HANDLE)_get_osfhandle(fd_stdout);
                si.hStdError = (HANDLE)_get_osfhandle(fd_stderr);
 
+               si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
+               si.dwFlags = STARTF_USESTDHANDLES;
+               if (si.hStdOutput == INVALID_HANDLE_VALUE
+                               || si.hStdError == INVALID_HANDLE_VALUE) {
+                       return -1;
+               }
+       } else {
+               /* redirect subprocess stdout, stderr into current process */
+               si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
+               si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
+
                si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
                si.dwFlags = STARTF_USESTDHANDLES;
                if (si.hStdOutput == INVALID_HANDLE_VALUE
@@ -166,8 +177,11 @@ win32execute(char *path, char **argv, int doreturn,
        add_exe_ext_if_no_to_fullpath(full_path_win_ext, MAX_PATH, ext, path);
        ret = CreateProcess(full_path_win_ext, args, NULL, NULL, 1, 0, NULL, NULL,
                        &si, &pi);
-       close(fd_stdout);
-       close(fd_stderr);
+       if (fd_stdout != -1)
+       {
+               close(fd_stdout);
+               close(fd_stderr);
+       }
        free(args);
        if (ret == 0) {
                LPVOID lpMsgBuf;