diff options
author | David Malone <dwmalone@FreeBSD.org> | 2001-11-04 21:15:52 +0000 |
---|---|---|
committer | David Malone <dwmalone@FreeBSD.org> | 2001-11-04 21:15:52 +0000 |
commit | 3d08935d6a9c40cef5059bf6f4f2f0539714a6ec (patch) | |
tree | 7ca9569b44063a2fb9c8cdf2f870c7664c2df54e /contrib/top/top.c | |
parent | a2866b2ef9ad557ae669fe9cdc179b8ddfa5820b (diff) | |
download | src-3d08935d6a9c40cef5059bf6f4f2f0539714a6ec.tar.gz src-3d08935d6a9c40cef5059bf6f4f2f0539714a6ec.zip |
Make top exit if its tty vanishes.
PR: 30939, 30581
Submitted by: Edwin Groothuis <edwin@mavetju.org>
Submitted by: Andrew L. Neporada <andr@dgap.mipt.ru>
MFC after: 2 weeks
Notes
Notes:
svn path=/head/; revision=86042
Diffstat (limited to 'contrib/top/top.c')
-rw-r--r-- | contrib/top/top.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/contrib/top/top.c b/contrib/top/top.c index ef1d47fa1148..9b9b2b2b917c 100644 --- a/contrib/top/top.c +++ b/contrib/top/top.c @@ -32,6 +32,7 @@ char *copyright = */ #include "os.h" +#include <errno.h> #include <signal.h> #include <setjmp.h> #include <ctype.h> @@ -157,6 +158,7 @@ char *argv[]; int topn = Default_TOPN; int delay = Default_DELAY; int displays = 0; /* indicates unspecified */ + int sel_ret = 0; time_t curr_time; char *(*get_userid)() = username; char *uname_field = "USERNAME"; @@ -711,7 +713,10 @@ restart: } /* wait for either input or the end of the delay period */ - if (select(32, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timeout) > 0) + sel_ret = select(2, &readfds, NULL, NULL, &timeout); + if (sel_ret < 0 && errno != EINTR) + quit(0); + if (sel_ret > 0) { int newval; char *errmsg; @@ -721,7 +726,8 @@ restart: /* now read it and convert to command strchr */ /* (use "change" as a temporary to hold strchr) */ - (void) read(0, &ch, 1); + if (read(0, &ch, 1) != 1) + quit(0); if ((iptr = strchr(command_chars, ch)) == NULL) { if (ch != '\r' && ch != '\n') |