Module: wine Branch: stable Commit: a4ac7faab9effb60f9d5ec5bb8c8df149ea2cad4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=a4ac7faab9effb60f9d5ec5bb...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Feb 16 20:32:33 2021 +0100
conhost: Avoid assumption about the exact Unix cursor position after writing to the last column.
Spotted by Roman Pišl.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50581 Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 9e97f3513eeea8da96654e9843579461649c3597) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
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 );