merge from gcc
This commit is contained in:
parent
7eea7d65f7
commit
9974286ed1
@ -1,3 +1,9 @@
|
|||||||
|
2012-07-26 Kazu Hirata <kazu@codesourcery.com>
|
||||||
|
Sandra Loosemore <sandra@codesourcery.com>
|
||||||
|
|
||||||
|
* pex-win32.c (pex_win32_exec_child): Only close original file
|
||||||
|
descriptors if child is launched successfully.
|
||||||
|
|
||||||
2012-07-18 Jason Merrill <jason@redhat.com>
|
2012-07-18 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
* cp-demangle.c (cplus_demangle_operators): Add *_cast.
|
* cp-demangle.c (cplus_demangle_operators): Add *_cast.
|
||||||
|
@ -741,24 +741,17 @@ pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags,
|
|||||||
int orig_out, orig_in, orig_err;
|
int orig_out, orig_in, orig_err;
|
||||||
BOOL separate_stderr = !(flags & PEX_STDERR_TO_STDOUT);
|
BOOL separate_stderr = !(flags & PEX_STDERR_TO_STDOUT);
|
||||||
|
|
||||||
/* Ensure we have inheritable descriptors to pass to the child, and close the
|
/* Ensure we have inheritable descriptors to pass to the child. */
|
||||||
original descriptors. */
|
|
||||||
orig_in = in;
|
orig_in = in;
|
||||||
in = _dup (orig_in);
|
in = _dup (orig_in);
|
||||||
if (orig_in != STDIN_FILENO)
|
|
||||||
_close (orig_in);
|
|
||||||
|
|
||||||
orig_out = out;
|
orig_out = out;
|
||||||
out = _dup (orig_out);
|
out = _dup (orig_out);
|
||||||
if (orig_out != STDOUT_FILENO)
|
|
||||||
_close (orig_out);
|
|
||||||
|
|
||||||
if (separate_stderr)
|
if (separate_stderr)
|
||||||
{
|
{
|
||||||
orig_err = errdes;
|
orig_err = errdes;
|
||||||
errdes = _dup (orig_err);
|
errdes = _dup (orig_err);
|
||||||
if (orig_err != STDERR_FILENO)
|
|
||||||
_close (orig_err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stdin_handle = INVALID_HANDLE_VALUE;
|
stdin_handle = INVALID_HANDLE_VALUE;
|
||||||
@ -836,6 +829,22 @@ pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags,
|
|||||||
*errmsg = "CreateProcess";
|
*errmsg = "CreateProcess";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the child was created successfully, close the original file
|
||||||
|
descriptors. If the process creation fails, these are closed by
|
||||||
|
pex_run_in_environment instead. We must not close them twice as
|
||||||
|
that seems to cause a Windows exception. */
|
||||||
|
|
||||||
|
if (pid != (pid_t) -1)
|
||||||
|
{
|
||||||
|
if (orig_in != STDIN_FILENO)
|
||||||
|
_close (orig_in);
|
||||||
|
if (orig_out != STDOUT_FILENO)
|
||||||
|
_close (orig_out);
|
||||||
|
if (separate_stderr
|
||||||
|
&& orig_err != STDERR_FILENO)
|
||||||
|
_close (orig_err);
|
||||||
|
}
|
||||||
|
|
||||||
/* Close the standard input, standard output and standard error handles
|
/* Close the standard input, standard output and standard error handles
|
||||||
in the parent. */
|
in the parent. */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user