diff options
author | Takashi Yano <takashi.yano@nifty.ne.jp> | 2019-09-18 17:29:18 +0300 |
---|---|---|
committer | Ken Brown <kbrown@cornell.edu> | 2019-09-20 23:18:47 +0300 |
commit | ac5357b9fe3486b909076ec706de64e91ba8ad81 (patch) | |
tree | 88d2aff3157337af8b9504a73d3e96a47c64dc79 | |
parent | 831b1569dc8a1ab9a9767f525eca17fccdb3e0d0 (diff) |
Cygwin: pty: Make GDB work again on pty.
-rw-r--r-- | winsup/cygwin/fhandler_tty.cc | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index 2a1c34f7d..843807aab 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -197,6 +197,9 @@ DEF_HOOK (ReadConsoleInputA); DEF_HOOK (ReadConsoleInputW); DEF_HOOK (PeekConsoleInputA); DEF_HOOK (PeekConsoleInputW); +/* CreateProcess() is hooked for GDB etc. */ +DEF_HOOK (CreateProcessA); +DEF_HOOK (CreateProcessW); static BOOL WINAPI WriteFile_Hooked @@ -331,6 +334,35 @@ PeekConsoleInputW_Hooked set_ishybrid_and_switch_to_pcon (h); return PeekConsoleInputW_Orig (h, r, l, n); } +/* CreateProcess() is hooked for GDB etc. */ +static BOOL WINAPI +CreateProcessA_Hooked + (LPCSTR n, LPSTR c, LPSECURITY_ATTRIBUTES pa, LPSECURITY_ATTRIBUTES ta, + BOOL inh, DWORD f, LPVOID e, LPCSTR d, + LPSTARTUPINFOA si, LPPROCESS_INFORMATION pi) +{ + HANDLE h; + if (si->dwFlags & STARTF_USESTDHANDLES) + h = si->hStdOutput; + else + h = GetStdHandle (STD_OUTPUT_HANDLE); + set_ishybrid_and_switch_to_pcon (h); + return CreateProcessA_Orig (n, c, pa, ta, inh, f, e, d, si, pi); +} +static BOOL WINAPI +CreateProcessW_Hooked + (LPCWSTR n, LPWSTR c, LPSECURITY_ATTRIBUTES pa, LPSECURITY_ATTRIBUTES ta, + BOOL inh, DWORD f, LPVOID e, LPCWSTR d, + LPSTARTUPINFOW si, LPPROCESS_INFORMATION pi) +{ + HANDLE h; + if (si->dwFlags & STARTF_USESTDHANDLES) + h = si->hStdOutput; + else + h = GetStdHandle (STD_OUTPUT_HANDLE); + set_ishybrid_and_switch_to_pcon (h); + return CreateProcessW_Orig (n, c, pa, ta, inh, f, e, d, si, pi); +} #else /* USE_API_HOOK */ #define WriteFile_Orig 0 #define ReadFile_Orig 0 @@ -2778,6 +2810,9 @@ fhandler_pty_slave::fixup_after_exec () DO_HOOK (NULL, ReadConsoleInputW); DO_HOOK (NULL, PeekConsoleInputA); DO_HOOK (NULL, PeekConsoleInputW); + /* CreateProcess() is hooked for GDB etc. */ + DO_HOOK (NULL, CreateProcessA); + DO_HOOK (NULL, CreateProcessW); } #endif /* USE_API_HOOK */ } |