Jelajahi Sumber

console: fix linenoiseProbe never timing out

Fixes a regression from 753a92952: if cb was negative, read_bytes
overflowed, because the type was changed from int to size_t.

Also fixes incorrect timeout calculation: timeout_ms was 200, but
each iteration delayed for 10ms, and reduced timeout_ms by 1. This
made the effective timeout to be 2000ms.
Ivan Grokhotkov 5 tahun lalu
induk
melakukan
9b2b86b7d9
1 mengubah file dengan 6 tambahan dan 2 penghapusan
  1. 6 2
      components/console/linenoise/linenoise.c

+ 6 - 2
components/console/linenoise/linenoise.c

@@ -935,13 +935,17 @@ int linenoiseProbe(void) {
 
     /* Try to read response */
     int timeout_ms = 200;
+    const int retry_ms = 10;
     size_t read_bytes = 0;
     while (timeout_ms > 0 && read_bytes < 4) { // response is ESC[0n or ESC[3n
-        usleep(10000);
+        usleep(retry_ms * 1000);
+        timeout_ms -= retry_ms;
         char c;
         int cb = read(stdin_fileno, &c, 1);
+        if (cb < 0) {
+            continue;
+        }
         read_bytes += cb;
-        timeout_ms--;
     }
     /* Restore old mode */
     flags &= ~O_NONBLOCK;