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

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
...@@ -576,33 +576,23 @@ static void process_echoes(struct tty_struct *tty) ...@@ -576,33 +576,23 @@ static void process_echoes(struct tty_struct *tty)
break; break;
default: default:
if (iscntrl(op)) {
if (L_ECHOCTL(tty)) {
/*
* Ensure there is enough space
* for the whole ctrl pair.
*/
if (space < 2) {
no_space_left = 1;
break;
}
tty_put_char(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 * If the op is not a special byte code,
* undefined op. * 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;
break;
}
tty_put_char(tty, '^');
tty_put_char(tty, op ^ 0100);
tty->column += 2;
space -= 2;
cp += 2; cp += 2;
nr -= 2; nr -= 2;
} }
...@@ -809,8 +799,8 @@ static void echo_char_raw(unsigned char c, struct tty_struct *tty) ...@@ -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 * 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. * L_ECHO(tty) is true. Called from the driver receive_buf path.
* *
* This variant tags control characters to be possibly echoed as * This variant tags control characters to be echoed as "^X"
* as "^X" (where X is the letter representing the control char). * (where X is the letter representing the control char).
* *
* Locking: echo_lock to protect the echo buffer * Locking: echo_lock to protect the echo buffer
*/ */
...@@ -823,7 +813,7 @@ static void echo_char(unsigned char c, struct tty_struct *tty) ...@@ -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);
add_echo_byte(ECHO_OP_START, tty); add_echo_byte(ECHO_OP_START, tty);
} else { } else {
if (iscntrl(c) && c != '\t') if (L_ECHOCTL(tty) && iscntrl(c) && c != '\t')
add_echo_byte(ECHO_OP_START, tty); add_echo_byte(ECHO_OP_START, tty);
add_echo_byte(c, tty); add_echo_byte(c, tty);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment