svn commit: r197956 - head/usr.bin/systat
Jaakko Heinonen
jh at FreeBSD.org
Sun Oct 11 12:32:26 UTC 2009
Author: jh
Date: Sun Oct 11 12:32:25 2009
New Revision: 197956
URL: http://svn.freebsd.org/changeset/base/197956
Log:
- Catch SIGHUP to perform cleanup before exiting.
- Exit if getch() returns with an error other than EINTR. Otherwise
systat(1) may get stuck in an infinite loop if it doesn't receive
SIGHUP when terminal closes. [1]
- Remove attempt to clear stdio error indicators. getch() doesn't use
stdio, making it useless. [2]
- Remove unneeded masking of getch() return value. [2]
PR: bin/107171
Reviewed by: bde
Approved by: trasz (mentor)
Obtained from: OpenBSD [1]
Suggested by: bde [2]
MFC after: 1 month
Modified:
head/usr.bin/systat/keyboard.c
head/usr.bin/systat/main.c
Modified: head/usr.bin/systat/keyboard.c
==============================================================================
--- head/usr.bin/systat/keyboard.c Sun Oct 11 12:23:56 2009 (r197955)
+++ head/usr.bin/systat/keyboard.c Sun Oct 11 12:32:25 2009 (r197956)
@@ -39,8 +39,10 @@ __FBSDID("$FreeBSD$");
static const char sccsid[] = "@(#)keyboard.c 8.1 (Berkeley) 6/6/93";
#endif
+#include <errno.h>
#include <ctype.h>
#include <signal.h>
+#include <stdlib.h>
#include <termios.h>
#include "systat.h"
@@ -57,10 +59,11 @@ keyboard(void)
move(CMDLINE, 0);
do {
refresh();
- ch = getch() & 0177;
- if (ch == 0177 && ferror(stdin)) {
- clearerr(stdin);
- continue;
+ ch = getch();
+ if (ch == ERR) {
+ if (errno == EINTR)
+ continue;
+ exit(1);
}
if (ch >= 'A' && ch <= 'Z')
ch += 'a' - 'A';
Modified: head/usr.bin/systat/main.c
==============================================================================
--- head/usr.bin/systat/main.c Sun Oct 11 12:23:56 2009 (r197955)
+++ head/usr.bin/systat/main.c Sun Oct 11 12:32:25 2009 (r197956)
@@ -133,6 +133,7 @@ main(int argc, char **argv)
exit(1);
}
}
+ signal(SIGHUP, die);
signal(SIGINT, die);
signal(SIGQUIT, die);
signal(SIGTERM, die);
More information about the svn-src-all
mailing list