diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2009-11-26 10:58:06 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2009-11-26 10:58:06 +0000 |
commit | 7bdbf062cdfe2978f75f80ff803e5e40d783557d (patch) | |
tree | 05bc139ae2f62741c9899a8f817ec360c59e89fc | |
parent | b2225216e99b691493d4b6d60f5c696e918af0ca (diff) | |
download | newlib-7bdbf062cdfe2978f75f80ff803e5e40d783557d.zip newlib-7bdbf062cdfe2978f75f80ff803e5e40d783557d.tar.gz newlib-7bdbf062cdfe2978f75f80ff803e5e40d783557d.tar.bz2 |
* dtable.cc (dtable::stdio_init): Use GetCurrentProcess() rather than
hMainProc as process handle when duplicating the stdout handle.
Explain why. Add Win32 error code to debug output.
-rw-r--r-- | winsup/cygwin/ChangeLog | 6 | ||||
-rw-r--r-- | winsup/cygwin/dtable.cc | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 2c94913..923c578 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2009-11-26 Corinna Vinschen <corinna@vinschen.de> + + * dtable.cc (dtable::stdio_init): Use GetCurrentProcess() rather than + hMainProc as process handle when duplicating the stdout handle. + Explain why. Add Win32 error code to debug output. + 2009-11-23 Corinna Vinschen <corinna@vinschen.de> * fhandler_socket.cc (fhandler_socket::fixup_before_fork_exec): Add diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 77055ef..458e73f 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -177,12 +177,16 @@ dtable::stdio_init () { /* Since this code is not invoked for forked tasks, we don't have to worry about the close-on-exec flag here. */ - if (!DuplicateHandle (hMainProc, out, hMainProc, &err, 0, true, - DUPLICATE_SAME_ACCESS)) + /* CV 2009-11-26: Using hMainProc results in ERROR_INVALID_PARAMETER + when trying to duplicate a console handle. It only works using + the GetCurrentProcess () pseudo handle for some unknown reason. */ + if (!DuplicateHandle (GetCurrentProcess (), out, + GetCurrentProcess (), &err, + 0, TRUE, DUPLICATE_SAME_ACCESS)) { /* If that fails, do this as a fall back. */ err = out; - system_printf ("couldn't make stderr distinct from stdout"); + system_printf ("couldn't make stderr distinct from stdout, %E"); } } |