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:
Joe Peterson 2009-01-02 13:43:25 +00:00 committed by Linus Torvalds
parent fc6f623822
commit a59c0d6f14
1 changed files with 15 additions and 9 deletions

View File

@ -351,10 +351,12 @@ static int do_output_char(unsigned char c, struct tty_struct *tty, int space)
tty->column--; tty->column--;
break; break;
default: default:
if (O_OLCUC(tty)) if (!iscntrl(c)) {
c = toupper(c); if (O_OLCUC(tty))
if (!iscntrl(c) && !is_continuation(c, tty)) c = toupper(c);
tty->column++; if (!is_continuation(c, tty))
tty->column++;
}
break; break;
} }
@ -425,7 +427,9 @@ static ssize_t process_output_block(struct tty_struct *tty,
nr = space; nr = space;
for (i = 0, cp = buf; i < nr; i++, cp++) { for (i = 0, cp = buf; i < nr; i++, cp++) {
switch (*cp) { unsigned char c = *cp;
switch (c) {
case '\n': case '\n':
if (O_ONLRET(tty)) if (O_ONLRET(tty))
tty->column = 0; tty->column = 0;
@ -447,10 +451,12 @@ static ssize_t process_output_block(struct tty_struct *tty,
tty->column--; tty->column--;
break; break;
default: default:
if (O_OLCUC(tty)) if (!iscntrl(c)) {
goto break_out; if (O_OLCUC(tty))
if (!iscntrl(*cp)) goto break_out;
tty->column++; if (!is_continuation(c, tty))
tty->column++;
}
break; break;
} }
} }