- 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
This commit is contained in:
parent
f71e78a1d9
commit
c2dbb0de27
@ -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';
|
||||
|
@ -133,6 +133,7 @@ main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
signal(SIGHUP, die);
|
||||
signal(SIGINT, die);
|
||||
signal(SIGQUIT, die);
|
||||
signal(SIGTERM, die);
|
||||
|
Loading…
x
Reference in New Issue
Block a user