mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-06 05:06:29 +00:00
n_tty: Fix handling of control characters and continuations
Fix process_output_block to detect continuation characters correctly and to handle control characters even when O_OLCUC is enabled. Make similar change to do_output_char(). Signed-off-by: Joe Peterson <joe@skyrush.com> Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
fc6f623822
commit
a59c0d6f14
@ -351,10 +351,12 @@ static int do_output_char(unsigned char c, struct tty_struct *tty, int space)
|
||||
tty->column--;
|
||||
break;
|
||||
default:
|
||||
if (O_OLCUC(tty))
|
||||
c = toupper(c);
|
||||
if (!iscntrl(c) && !is_continuation(c, tty))
|
||||
tty->column++;
|
||||
if (!iscntrl(c)) {
|
||||
if (O_OLCUC(tty))
|
||||
c = toupper(c);
|
||||
if (!is_continuation(c, tty))
|
||||
tty->column++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -425,7 +427,9 @@ static ssize_t process_output_block(struct tty_struct *tty,
|
||||
nr = space;
|
||||
|
||||
for (i = 0, cp = buf; i < nr; i++, cp++) {
|
||||
switch (*cp) {
|
||||
unsigned char c = *cp;
|
||||
|
||||
switch (c) {
|
||||
case '\n':
|
||||
if (O_ONLRET(tty))
|
||||
tty->column = 0;
|
||||
@ -447,10 +451,12 @@ static ssize_t process_output_block(struct tty_struct *tty,
|
||||
tty->column--;
|
||||
break;
|
||||
default:
|
||||
if (O_OLCUC(tty))
|
||||
goto break_out;
|
||||
if (!iscntrl(*cp))
|
||||
tty->column++;
|
||||
if (!iscntrl(c)) {
|
||||
if (O_OLCUC(tty))
|
||||
goto break_out;
|
||||
if (!is_continuation(c, tty))
|
||||
tty->column++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user