n_tty: move echoctl check and clean up logic
Subsystems (2)
PATCH 2/2 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 Joe Peterson <[email protected]>
---
drivers/char/n_tty.c +18 -28
@@ -577,33 +577,23 @@ static void process_echoes(struct tty_stbreak ;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 -* undefined op. +* 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 ; +break ; + } +tty_put_char (tty,'^' ); +tty_put_char (tty, op ^0100 ); + tty->column +=2 ; + space -=2 ; cp +=2 ; nr -=2 ; }
@@ -810,8 +800,8 @@ static void echo_char_raw(unsigned char* 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 */
@@ -824,7 +814,7 @@ static void echo_char(unsigned char c, sadd_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); }