Support DISCARD (^O)
Eivind Evensen
eivinde at terraplane.org
Tue Dec 17 21:18:28 UTC 2013
Hello.
I don't know if there is any particular reason that support for DISCARD/^O
was not included in the tty rewrite that happened from FreeBSD 7 to 8,
but in case anybody else wants it, here's a diff functioning mostly
like in 7, except output isn't switched back on automatically on input.
Diff is against FreeBSD 8, however, last time I checked I didn't see
much difference in the newer versions.
Regards, Eivind
diff -r 91820d9948e0 -r 13f40d577646 sys/kern/tty_ttydisc.c
--- a/sys/kern/tty_ttydisc.c Fri Feb 22 09:45:32 2013 +0100
+++ b/sys/kern/tty_ttydisc.c Tue Dec 17 23:03:17 2013 +0100
@@ -448,6 +448,9 @@
if (tp->t_flags & TF_ZOMBIE)
return (EIO);
+ if (tp->t_termios.c_lflag & FLUSHO)
+ return (0);
+
/*
* We don't need to check whether the process is the foreground
* process group or if we have a carrier. This is already done
@@ -881,6 +884,14 @@
/* Special control characters that are implementation dependent. */
if (CMP_FLAG(l, IEXTEN)) {
+ /* Discard (^O) */
+ if (CMP_CC(VDISCARD, c)) {
+ if (!(tp->t_termios.c_lflag & FLUSHO))
+ ttyoutq_write_nofrag(&tp->t_outq, "^O", 2);
+ tp->t_termios.c_lflag ^= FLUSHO;
+ return(0);
+ }
+
/* Accept the next character as literal. */
if (CMP_CC(VLNEXT, c)) {
if (CMP_FLAG(l, ECHO)) {
More information about the freebsd-stable
mailing list