svn commit: r196528 - head/sbin/savecore

Ulf Lilleengen lulf at FreeBSD.org
Tue Aug 25 06:21:46 UTC 2009


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;
+}


More information about the svn-src-head mailing list