# 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
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
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;