* [PATCH] Resume TTY on SUSP and fix CRNL order in N_TTY line discipline
@ 2008-02-25 6:28 Joe Peterson
0 siblings, 0 replies; only message in thread
From: Joe Peterson @ 2008-02-25 6:28 UTC (permalink / raw)
To: linux-kernel, Andrew Morton, alan
[-- Attachment #1: Type: text/plain, Size: 388 bytes --]
Here is a small patch to further refine behavior in n_tty.c. It
addresses two fine points in how received characters are treated - one
to handle the signal chars in stopped TTYs more consistently, and the
other to make the order of cr/nl translations more logical and
consistent with other Unixes when unusual stty settings are used (e.g.
if someone were to set intr to ^J).
-Joe
[-- Attachment #2: resume-tty-on-susp-and-fix-crnl-order-in-n_tty-line-discipline.patch --]
[-- Type: text/plain, Size: 1853 bytes --]
Refine these behaviors in the N_TTY line discipline:
1) Handle the signal characters consistently when received in
a stopped TTY so that SUSP (typically ctrl-Z) behaves like
INTR and QUIT in resuming a stopped TTY.
2) Adjust the order in which the IGNCR/ICRNL/INLCR processing
is applied to be more logical and consistent with the behavior
of other Unix systems.
Signed-off-by: Joe Peterson <joe@skyrush.com>
---
diff -puN drivers/char/n_tty.c~resume-tty-on-susp-and-fix-crnl-order-in-n_tty-line-discipline drivers/char/n_tty.c
--- a/drivers/char/n_tty.c~resume-tty-on-susp-and-fix-crnl-order-in-n_tty-line-discipline 2008-02-24 08:36:24.000000000 -0700
+++ a/drivers/char/n_tty.c 2008-02-24 21:08:15.000000000 -0700
@@ -701,7 +701,7 @@ static inline void n_tty_receive_char(st
if (tty->stopped && !tty->flow_stopped && I_IXON(tty) &&
((I_IXANY(tty) && c != START_CHAR(tty) && c != STOP_CHAR(tty)) ||
- c == INTR_CHAR(tty) || c == QUIT_CHAR(tty)))
+ c == INTR_CHAR(tty) || c == QUIT_CHAR(tty) || c == SUSP_CHAR(tty)))
start_tty(tty);
if (tty->closing) {
@@ -739,13 +739,6 @@ static inline void n_tty_receive_char(st
return;
}
- if (c == '\r') {
- if (I_IGNCR(tty))
- return;
- if (I_ICRNL(tty))
- c = '\n';
- } else if (c == '\n' && I_INLCR(tty))
- c = '\r';
if (I_IXON(tty)) {
if (c == START_CHAR(tty)) {
start_tty(tty);
@@ -756,6 +749,7 @@ static inline void n_tty_receive_char(st
return;
}
}
+
if (L_ISIG(tty)) {
int signal;
signal = SIGINT;
@@ -785,6 +779,15 @@ send_signal:
return;
}
}
+
+ if (c == '\r') {
+ if (I_IGNCR(tty))
+ return;
+ if (I_ICRNL(tty))
+ c = '\n';
+ } else if (c == '\n' && I_INLCR(tty))
+ c = '\r';
+
if (tty->icanon) {
if (c == ERASE_CHAR(tty) || c == KILL_CHAR(tty) ||
(c == WERASE_CHAR(tty) && L_IEXTEN(tty))) {
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-02-25 6:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-25 6:28 [PATCH] Resume TTY on SUSP and fix CRNL order in N_TTY line discipline Joe Peterson
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.