diff options
author | Julian Brown <julian@codesourcery.com> | 2009-05-17 13:12:28 +0000 |
---|---|---|
committer | Julian Brown <julian@codesourcery.com> | 2009-05-17 13:12:28 +0000 |
commit | ed20019d73a315e26504cfc65a58eaa03afec42a (patch) | |
tree | c681546f2588a0d2c9848de3adf3ef2494cf1549 /libiberty/pex-win32.c | |
parent | d5f3b87372b1fcd81dd04a07495aac49babacdc7 (diff) | |
download | gdb-ed20019d73a315e26504cfc65a58eaa03afec42a.zip gdb-ed20019d73a315e26504cfc65a58eaa03afec42a.tar.gz gdb-ed20019d73a315e26504cfc65a58eaa03afec42a.tar.bz2 |
libiberty/
* pex-win32.c (pex_win32_exec_child): Fix logic to avoid closing
standard handles (stdin, stdout, stderr) in parent.
Diffstat (limited to 'libiberty/pex-win32.c')
-rw-r--r-- | libiberty/pex-win32.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c index 30ef435..91e0bc8 100644 --- a/libiberty/pex-win32.c +++ b/libiberty/pex-win32.c @@ -753,17 +753,20 @@ pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags, original descriptors. */ orig_in = in; in = _dup (orig_in); - _close (orig_in); + if (orig_in != STDIN_FILENO) + _close (orig_in); orig_out = out; out = _dup (orig_out); - _close (orig_out); + if (orig_out != STDOUT_FILENO) + _close (orig_out); if (separate_stderr) { orig_err = errdes; errdes = _dup (orig_err); - _close (orig_err); + if (orig_err != STDERR_FILENO) + _close (orig_err); } stdin_handle = INVALID_HANDLE_VALUE; @@ -844,11 +847,9 @@ pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags, /* Close the standard input, standard output and standard error handles in the parent. */ - if (in != STDIN_FILENO) - _close (in); - if (out != STDOUT_FILENO) - _close (out); - if (errdes != STDERR_FILENO) + _close (in); + _close (out); + if (separate_stderr) _close (errdes); return pid; |