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);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to