commit 47f9a83aaf2304291c6b7b8812747f482f609902
Author:     Jan Klemkow <[email protected]>
AuthorDate: Mon Apr 20 22:59:50 2020 +0200
Commit:     Jan Klemkow <[email protected]>
CommitDate: Mon Apr 20 22:59:50 2020 +0200

    fix die() on too fast scroll input

diff --git a/scroll.c b/scroll.c
index 46fe5c0..14fb287 100644
--- a/scroll.c
+++ b/scroll.c
@@ -226,12 +226,11 @@ getcursorposition(int *x, int *y)
        if (write(STDOUT_FILENO, "\033[6n", 4) < 0)
                die("requesting cursor position");
 
-       if ((n = read(STDIN_FILENO, input, sizeof(input)-1)) < 0)
-               die("reading cursor position");
-       input[n] = '\0';
-
-       if (sscanf(input, "\033[%d;%dR", x, y) != 2)
-               die("parsing cursor position: %s", input);
+       do {
+               if ((n = read(STDIN_FILENO, input, sizeof(input)-1)) < 0)
+                       die("reading cursor position");
+               input[n] = '\0';
+       } while (sscanf(input, "\033[%d;%dR", x, y) != 2);
 
        if (x <= 0 || y <= 0)
                die("invalid cursor position: x=%d y=%d", x, y);

Reply via email to