Module Name: src
Committed By: mrg
Date: Wed Jan 19 01:40:05 UTC 2022
Modified Files:
src/sbin/scan_ffs: scan_ffs.c
Log Message:
add SIGINFO support. now you can know how far along the scan is.
To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/sbin/scan_ffs/scan_ffs.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/scan_ffs/scan_ffs.c
diff -u src/sbin/scan_ffs/scan_ffs.c:1.32 src/sbin/scan_ffs/scan_ffs.c:1.33
--- src/sbin/scan_ffs/scan_ffs.c:1.32 Thu Oct 15 06:25:23 2015
+++ src/sbin/scan_ffs/scan_ffs.c Wed Jan 19 01:40:05 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: scan_ffs.c,v 1.32 2015/10/15 06:25:23 dholland Exp $ */
+/* $NetBSD: scan_ffs.c,v 1.33 2022/01/19 01:40:05 mrg Exp $ */
/*
* Copyright (c) 2005-2007 Juan Romero Pardines
@@ -33,7 +33,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: scan_ffs.c,v 1.32 2015/10/15 06:25:23 dholland Exp $");
+__RCSID("$NetBSD: scan_ffs.c,v 1.33 2022/01/19 01:40:05 mrg Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -80,6 +80,8 @@ static int sbaddr = 0; /* counter for th
static char device[MAXPATHLEN];
static const char *fstypes[] = { "NONE", "FFSv1", "FFSv2" };
+static sig_atomic_t print_info = 0;
+
#define FSTYPE_NONE 0
#define FSTYPE_FFSV1 1
#define FSTYPE_FFSV2 2
@@ -109,6 +111,13 @@ static void lfs_scan(struct sblockinfo *
static void usage(void) __dead;
static int scan_disk(int, daddr_t, daddr_t, int);
+static void
+got_siginfo(int signo)
+{
+
+ print_info = 1;
+}
+
static int
ffs_checkver(struct sblockinfo *sbi)
{
@@ -389,7 +398,17 @@ scan_disk(int fd, daddr_t beg, daddr_t e
(void)printf(
"# size offset fstype [fsize bsize cpg/sgs]\n");
+ const daddr_t total = end - beg;
for (blk = beg; blk <= end; blk += SBPASS) {
+ if (print_info) {
+ const daddr_t done = blk - beg;
+ const int pcent = (int)((100.0 * done) / total);
+
+ fprintf(stderr, "%s: done %llu of %llu blocks (%d%%)\n",
+ getprogname(), (unsigned long long)done,
+ (unsigned long long)total, pcent);
+ print_info = 0;
+ }
if (pread(fd, buf, sizeof(buf), blk * 512) == -1) {
if (fflag && fd >= 0)
(void)close(fd);
@@ -479,6 +498,8 @@ main(int argc, char **argv)
argc -= optind;
argv += optind;
+ signal(SIGINFO, got_siginfo);
+
if (fflag) {
struct stat stp;