Author: lulf
Date: Tue Aug 25 06:21:45 2009
New Revision: 196528
URL: http://svn.freebsd.org/changeset/base/196528

Log:
  - Add a SIGINFO handler for savecore.

Modified:
  head/sbin/savecore/savecore.c

Modified: head/sbin/savecore/savecore.c
==============================================================================
--- head/sbin/savecore/savecore.c       Tue Aug 25 04:09:09 2009        
(r196527)
+++ head/sbin/savecore/savecore.c       Tue Aug 25 06:21:45 2009        
(r196528)
@@ -97,6 +97,9 @@ static int nfound, nsaved, nerr;                      /* st
 
 extern FILE *zopen(const char *, const char *);
 
+static sig_atomic_t got_siginfo;
+static void infohandler(int);
+
 static void
 printheader(FILE *f, const struct kerneldumpheader *h, const char *device,
     int bounds, const int status)
@@ -231,9 +234,10 @@ DoRegularFile(int fd, off_t dumpsize, ch
     const char *filename, FILE *fp)
 {
        int he, hs, nr, nw, wl;
-       off_t dmpcnt;
+       off_t dmpcnt, origsize;
 
        dmpcnt = 0;
+       origsize = dumpsize;
        he = 0;
        while (dumpsize > 0) {
                wl = BUFFERSIZE;
@@ -304,6 +308,11 @@ DoRegularFile(int fd, off_t dumpsize, ch
                        fflush(stdout);
                }
                dumpsize -= wl;
+               if (got_siginfo) {
+                       printf("%s %.1lf%%\n", filename, (100.0 - (100.0 *
+                           (double)dumpsize / (double)origsize)));
+                       got_siginfo = 0;
+               }
        }
        return (0);
 }
@@ -648,6 +657,7 @@ main(int argc, char **argv)
        nfound = nsaved = nerr = 0;
 
        openlog("savecore", LOG_PERROR, LOG_DAEMON);
+       signal(SIGINFO, infohandler);
 
        while ((ch = getopt(argc, argv, "Ccfkvz")) != -1)
                switch(ch) {
@@ -719,3 +729,9 @@ main(int argc, char **argv)
 
        return (0);
 }
+
+static void
+infohandler(int sig __unused)
+{
+       got_siginfo = 1;
+}
_______________________________________________
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