This removes duplicated initialization of variables (after reordering 'c' initialization). It will also allow for eliminating whole translation into a separate function in the next patch. Note that vc_state, vc_utf etc. are checked with every rescan now. But they are immutable for non-control characters where rescan might be only necessary. Signed-off-by: Jiri Slaby <jslaby@xxxxxxx> --- drivers/tty/vt/vt.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index bf171bb1d2fd..93ad7e004900 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c @@ -2717,10 +2717,11 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co while (!tty->stopped && count) { int orig = *buf; - c = orig; buf++; n++; count--; +rescan_last_byte: + c = orig; rescan = false; inverse = false; width = 1; @@ -2729,7 +2730,6 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co if (vc->vc_state != ESnormal) { tc = c; } else if (vc->vc_utf && !vc->vc_disp_ctrl) { -rescan_last_byte: tc = c = vc_translate_unicode(vc, c, &rescan); if (tc == -1) continue; @@ -2834,13 +2834,9 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co if (inverse) con_flush(vc, draw_from, draw_to, &draw_x); - if (rescan) { - rescan = false; - inverse = false; - width = 1; - c = orig; + if (rescan) goto rescan_last_byte; - } + continue; } con_flush(vc, draw_from, draw_to, &draw_x); -- 2.27.0