From: leanid Date: Fri, 5 Dec 2014 10:44:03 +0000 (+0300) Subject: fix stdout, stderr if compiler failed X-Git-Tag: v3.2.2~36 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=67ed2854ea61dbc5455971e96cb34668ac54c98b;p=thirdparty%2Fccache.git fix stdout, stderr if compiler failed --- diff --git a/ccache.h b/ccache.h index 4dc94ee72..174e58221 100644 --- 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 diff --git a/execute.c b/execute.c index 5af0cf3e2..f4430497e 100644 --- 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;