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