[PATCH v2 1/3] Cygwin: syscalls.cc: Make _get_osfhandle() return appropriate handle.
Takashi Yano
takashi.yano@nifty.ne.jp
Sun Mar 21 23:26:45 GMT 2021
- Currently, _get_osfhandle() returns input handle for pty even for
stdout and stdout. This patch fixes the issue. Also, setup_locale()
is called to make sure the charset conversion works for output.
---
winsup/cygwin/syscalls.cc | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 6ba4f10f7..205d15951 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -3223,7 +3223,18 @@ _get_osfhandle (int fd)
cygheap_fdget cfd (fd);
if (cfd >= 0)
- res = (long) cfd->get_handle ();
+ {
+ if (cfd->get_major () == DEV_PTYS_MAJOR)
+ {
+ fhandler_pty_slave *ptys =
+ (fhandler_pty_slave *) (fhandler_base *) cfd;
+ ptys->setup_locale ();
+ }
+ if (fd == 1 || fd == 2)
+ res = (long) cfd->get_output_handle ();
+ else
+ res = (long) cfd->get_handle_cyg ();
+ }
else
res = -1;
--
2.30.2
More information about the Cygwin-patches
mailing list