Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Dec 2013 22:18:16 +0100
From:      Eivind Evensen <eivinde@terraplane.org>
To:        freebsd-stable@freebsd.org
Subject:   Support DISCARD (^O)
Message-ID:  <20131217211816.GA41797@klump.hjerdalen.lokalnett>

next in thread | raw e-mail | index | archive | help
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)) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20131217211816.GA41797>