Skip to content

Commit

Permalink
n_tty: Fix handling of control characters and continuations
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Joe Peterson authored and Linus Torvalds committed Jan 2, 2009
1 parent fc6f623 commit a59c0d6
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions drivers/char/n_tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
}
Expand Down

0 comments on commit a59c0d6

Please sign in to comment.