=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/top/display.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- src/usr.bin/top/display.c 2003/06/19 22:40:45 1.16 +++ src/usr.bin/top/display.c 2003/11/01 20:20:57 1.17 @@ -1,4 +1,4 @@ -/* $OpenBSD: display.c,v 1.16 2003/06/19 22:40:45 millert Exp $ */ +/* $OpenBSD: display.c,v 1.17 2003/11/01 20:20:57 deraadt Exp $ */ /* * Top users/processes display for Unix @@ -50,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -756,12 +757,20 @@ readline(char *buffer, int size, int numeric) { char *ptr = buffer, ch, cnt = 0, maxcnt = 0; + extern volatile sig_atomic_t leaveflag; + ssize_t len; /* allow room for null terminator */ size -= 1; /* read loop */ - while ((fflush(stdout), read(0, ptr, 1) > 0)) { + while ((fflush(stdout), (len = read(0, ptr, 1)) > 0)) { + + if (len == 0 || leaveflag) { + end_screen(); + exit(0); + } + /* newline means we are done */ if ((ch = *ptr) == '\n') break;