getnstr() returns KEY_RESIZE if there was a pending resize event, so loop
authorguenther <guenther@openbsd.org>
Tue, 14 Jan 2014 02:44:57 +0000 (02:44 +0000)
committerguenther <guenther@openbsd.org>
Tue, 14 Jan 2014 02:44:57 +0000 (02:44 +0000)
until it stops returning that, resetting the cursor position each time.

hint from Gregor Best (gbe (at) ring0.de)
problem noted by and ok sthen@

usr.bin/top/display.c

index d91dc26..05e62ed 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: display.c,v 1.46 2013/11/28 18:24:55 deraadt Exp $         */
+/* $OpenBSD: display.c,v 1.47 2014/01/14 02:44:57 guenther Exp $        */
 
 /*
  *  Top users/processes display for Unix
@@ -641,9 +641,12 @@ readline(char *buffer, int size)
        /* allow room for null terminator */
        size -= 1;
 
-       if (smart_terminal)
-               getnstr(buffer, size);
-       else
+       if (smart_terminal) {
+               int y, x;
+               getyx(stdscr, y, x);
+               while (getnstr(buffer, size) == KEY_RESIZE)
+                       move(y, x);
+       } else
                return readlinedumb(buffer, size);
 
        cnt = strlen(buffer);