From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id 9F5C13858D37; Mon, 17 Aug 2020 09:16:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9F5C13858D37 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: pty: Change the timing of set_locale() call again. X-Act-Checkin: newlib-cygwin X-Git-Author: Takashi Yano via Cygwin-patches X-Git-Refname: refs/heads/master X-Git-Oldrev: 095972ce5b1d319915501a7e381802914bed790c X-Git-Newrev: 70d02aaca6ca4aa8990c673b2b0d2220ae813ee4 Message-Id: <20200817091611.9F5C13858D37@sourceware.org> Date: Mon, 17 Aug 2020 09:16:11 +0000 (GMT) X-BeenThere: cygwin-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Aug 2020 09:16:11 -0000 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=70d02aaca6ca4aa8990c673b2b0d2220ae813ee4 commit 70d02aaca6ca4aa8990c673b2b0d2220ae813ee4 Author: Takashi Yano via Cygwin-patches Date: Sat Aug 15 12:23:52 2020 +0900 Cygwin: pty: Change the timing of set_locale() call again. - After commit 095972ce5b1d319915501a7e381802914bed790c, charset conversion in mintty is broken if charset is set to other than UTF-8. This seems to be caused because mintty does not set locale yet at fork() call. This patch changes the timing of set_locale() call again to avoid this issue. Diff: --- winsup/cygwin/fhandler_tty.cc | 10 ++++++---- winsup/cygwin/spawn.cc | 12 ++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc index 40b79bfbb..6294e2c20 100644 --- a/winsup/cygwin/fhandler_tty.cc +++ b/winsup/cygwin/fhandler_tty.cc @@ -2852,6 +2852,9 @@ get_langinfo (char *locale_out, char *charset_out) void fhandler_pty_slave::setup_locale (void) { + if (get_ttyp ()->term_code_page != 0) + return; + char locale[ENCODING_LEN + 1] = "C"; char charset[ENCODING_LEN + 1] = "ASCII"; LCID lcid = get_langinfo (locale, charset); @@ -2983,10 +2986,6 @@ fhandler_pty_slave::fixup_after_fork (HANDLE parent) // fork_fixup (parent, inuse, "inuse"); // fhandler_pty_common::fixup_after_fork (parent); report_tty_counts (this, "inherited", ""); - - /* Set locale */ - if (get_ttyp ()->term_code_page == 0) - setup_locale (); } void @@ -3024,6 +3023,9 @@ fhandler_pty_slave::fixup_after_exec () } } + /* Set locale */ + setup_locale (); + /* Hook Console API */ if (get_pseudo_console ()) { diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index e70ceb86d..af177c0f1 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -628,6 +628,18 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv, } } + if (!iscygwin ()) + { + cfd.rewind (); + while (cfd.next () >= 0) + if (cfd->get_major () == DEV_PTYS_MAJOR) + { + fhandler_pty_slave *ptys = + (fhandler_pty_slave *)(fhandler_base *) cfd; + ptys->setup_locale (); + } + } + /* Set up needed handles for stdio */ si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = handle ((in__stdin < 0 ? 0 : in__stdin), false,