Jacek Caban : conhost: Avoid assumption about the exact Unix cursor position after writing to the last column.

Alexandre Julliard julliard at winehq.org
Tue Feb 16 16:03:19 CST 2021


Module: wine
Branch: master
Commit: 9e97f3513eeea8da96654e9843579461649c3597
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9e97f3513eeea8da96654e9843579461649c3597

Author: Jacek Caban <jacek at 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 at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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 );




More information about the wine-cvs mailing list