From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7868) id A3D76385840A; Sun, 13 Feb 2022 15:18:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A3D76385840A Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Takashi Yano To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: pty: Pass Ctrl-Z (EOF) to non-cygwin apps with disable_pcon. X-Act-Checkin: newlib-cygwin X-Git-Author: Takashi Yano X-Git-Refname: refs/heads/master X-Git-Oldrev: c05c36a7c8af5e97fa379abb7571ed35a0088e98 X-Git-Newrev: b04aea00f1bb503dcc364c83ee3ef3da3bc1305e Message-Id: <20220213151834.A3D76385840A@sourceware.org> Date: Sun, 13 Feb 2022 15:18:34 +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: Sun, 13 Feb 2022 15:18:34 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dnewlib-cygwin.git;h=3Db04aea00f1b= b503dcc364c83ee3ef3da3bc1305e commit b04aea00f1bb503dcc364c83ee3ef3da3bc1305e Author: Takashi Yano Date: Sat Feb 12 17:51:55 2022 +0900 Cygwin: pty: Pass Ctrl-Z (EOF) to non-cygwin apps with disable_pcon. =20 - Previously, non-cygwin app running in pty started without pseudo console support was suspended by Ctrl-Z rather than sending EOF. Even worse, suspended app could not be resumed by fg command. With this patch, Ctrl-Z (EOF for non-cygwin apps) is passed to non-cygwin app instead of suspending that app. This patch also handles Ctrl-\ (QUIT) and Ctrl-D (EOF) as well. Diff: --- winsup/cygwin/fhandler_termios.cc | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_ter= mios.cc index fe1021520..b935a70bc 100644 --- a/winsup/cygwin/fhandler_termios.cc +++ b/winsup/cygwin/fhandler_termios.cc @@ -329,6 +329,7 @@ fhandler_termios::line_edit (const char *rptr, size_t n= read, termios& ti, if (ti.c_iflag & ISTRIP) c &=3D 0x7f; winpids pids ((DWORD) 0); + bool need_check_sigs =3D get_ttyp ()->pcon_input_state_eq (tty::to_c= yg); if (get_ttyp ()->pcon_input_state_eq (tty::to_nat)) { bool need_discard_input =3D false; @@ -349,11 +350,15 @@ fhandler_termios::line_edit (const char *rptr, size_t= nread, termios& ti, GenerateConsoleCtrlEvent (CTRL_C_EVENT, 0); need_discard_input =3D true; } + if (p->ctty =3D=3D get_ttyp ()->ntty + && p->pgid =3D=3D get_ttyp ()->getpgid () && !p->cygstarted) + need_check_sigs =3D true; } - if (need_discard_input - && !CCEQ (ti.c_cc[VINTR], c) + if (!CCEQ (ti.c_cc[VINTR], c) && !CCEQ (ti.c_cc[VQUIT], c) && !CCEQ (ti.c_cc[VSUSP], c)) + need_check_sigs =3D false; + if (need_discard_input && !need_check_sigs) { if (!(ti.c_lflag & NOFLSH)) { @@ -364,7 +369,7 @@ fhandler_termios::line_edit (const char *rptr, size_t n= read, termios& ti, continue; } } - if (ti.c_lflag & ISIG) + if ((ti.c_lflag & ISIG) && need_check_sigs) { int sig; if (CCEQ (ti.c_cc[VINTR], c)) @@ -469,7 +474,7 @@ fhandler_termios::line_edit (const char *rptr, size_t n= read, termios& ti, } continue; } - else if (CCEQ (ti.c_cc[VEOF], c)) + else if (CCEQ (ti.c_cc[VEOF], c) && need_check_sigs) { termios_printf ("EOF"); accept_input ();