svn commit: r199290 - stable/8/usr.bin/systat
Jaakko Heinonen
jh at FreeBSD.org
Sun Nov 15 14:11:27 UTC 2009
Author: jh
Date: Sun Nov 15 14:11:26 2009
New Revision: 199290
URL: http://svn.freebsd.org/changeset/base/199290
Log:
MFC r197956:
- 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.
- Remove attempt to clear stdio error indicators. getch() doesn't use
stdio, making it useless.
- Remove unneeded masking of getch() return value.
PR: bin/107171
Approved by: trasz (mentor)
Modified:
stable/8/usr.bin/systat/keyboard.c
stable/8/usr.bin/systat/main.c
Directory Properties:
stable/8/usr.bin/systat/ (props changed)
Modified: stable/8/usr.bin/systat/keyboard.c
==============================================================================
--- stable/8/usr.bin/systat/keyboard.c Sun Nov 15 11:43:28 2009 (r199289)
+++ stable/8/usr.bin/systat/keyboard.c Sun Nov 15 14:11:26 2009 (r199290)
@@ -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: stable/8/usr.bin/systat/main.c
==============================================================================
--- stable/8/usr.bin/systat/main.c Sun Nov 15 11:43:28 2009 (r199289)
+++ stable/8/usr.bin/systat/main.c Sun Nov 15 14:11:26 2009 (r199290)
@@ -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-stable-8
mailing list