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 mailing list