From 9e97f3513eeea8da96654e9843579461649c3597 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 16 Feb 2021 20:32:33 +0100 Subject: [PATCH] conhost: Avoid assumption about the exact Unix cursor position after writing to the last column. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spotted by Roman Pišl. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50581 Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard --- programs/conhost/conhost.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/programs/conhost/conhost.c b/programs/conhost/conhost.c index dd22636be6a..fbee37d9c01 100644 --- a/programs/conhost/conhost.c +++ b/programs/conhost/conhost.c @@ -195,6 +195,14 @@ static void set_tty_cursor( struct console *console, unsigned int x, unsigned in else if (!x && y == console->tty_cursor_y) strcpy( buf, "\r" ); else if (y == console->tty_cursor_y) { + if (console->is_unix && console->tty_cursor_x >= console->active->width) + { + /* Unix will usually have the cursor at width-1 in this case. instead of depending + * on the exact behaviour, move the cursor to the first column and move forward + * from threre. */ + tty_write( console, "\r", 1 ); + console->tty_cursor_x = 0; + } if (x + 1 == console->tty_cursor_x) strcpy( buf, "\b" ); else if (x > console->tty_cursor_x) sprintf( buf, "\x1b[%uC", x - console->tty_cursor_x ); else sprintf( buf, "\x1b[%uD", console->tty_cursor_x - x );