Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62b26358 authored by Joe Peterson's avatar Joe Peterson Committed by Live-CD User
Browse files

n_tty: move echoctl check and clean up logic

Check L_ECHOCTL before insertting a character in the echo buffer
(rather than as the buffer is processed), to be more consistent with
when all other L_ flags are checked.  Also cleaned up the related logic.

Note that this and the previous patch ("n_tty: honor opost flag for echoes")
were verified together by the reporters of the bug that patch addresses
(http://bugs.linuxbase.org/show_bug.cgi?id=2692

), and the test now passes.

Signed-off-by: default avatarJoe Peterson <joe@skyrush.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ee5aa7b8
Loading
Loading
Loading
Loading
+18 −28
Original line number Diff line number Diff line
@@ -576,11 +576,14 @@ static void process_echoes(struct tty_struct *tty)
				break;

			default:
				if (iscntrl(op)) {
					if (L_ECHOCTL(tty)) {
				/*
						 * Ensure there is enough space
						 * for the whole ctrl pair.
				 * If the op is not a special byte code,
				 * it is a ctrl char tagged to be echoed
				 * as "^X" (where X is the letter
				 * representing the control char).
				 * Note that we must ensure there is
				 * enough space for the whole ctrl pair.
				 *
				 */
				if (space < 2) {
					no_space_left = 1;
@@ -590,19 +593,6 @@ static void process_echoes(struct tty_struct *tty)
				tty_put_char(tty, op ^ 0100);
				tty->column += 2;
				space -= 2;
					} else {
						if (!space) {
							no_space_left = 1;
							break;
						}
						tty_put_char(tty, op);
						space--;
					}
				}
				/*
				 * If above falls through, this was an
				 * undefined op.
				 */
				cp += 2;
				nr -= 2;
			}
@@ -809,8 +799,8 @@ static void echo_char_raw(unsigned char c, struct tty_struct *tty)
 *	Echo user input back onto the screen. This must be called only when
 *	L_ECHO(tty) is true. Called from the driver receive_buf path.
 *
 *	This variant tags control characters to be possibly echoed as
 *	as "^X" (where X is the letter representing the control char).
 *	This variant tags control characters to be echoed as "^X"
 *	(where X is the letter representing the control char).
 *
 *	Locking: echo_lock to protect the echo buffer
 */
@@ -823,7 +813,7 @@ static void echo_char(unsigned char c, struct tty_struct *tty)
		add_echo_byte(ECHO_OP_START, tty);
		add_echo_byte(ECHO_OP_START, tty);
	} else {
		if (iscntrl(c) && c != '\t')
		if (L_ECHOCTL(tty) && iscntrl(c) && c != '\t')
			add_echo_byte(ECHO_OP_START, tty);
		add_echo_byte(c, tty);
	}