Module Name: src
Committed By: christos
Date: Thu Jan 20 14:44:19 UTC 2022
Modified Files:
src/sbin/scan_ffs: scan_ffs.c
Log Message:
- use /dev/tty instead of stderr for SIGINFO messages
- use uintmax_t instead of ull
- print fractional percentage to show that we are making progress on large
disks.
To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 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.33 src/sbin/scan_ffs/scan_ffs.c:1.34
--- src/sbin/scan_ffs/scan_ffs.c:1.33 Tue Jan 18 20:40:05 2022
+++ src/sbin/scan_ffs/scan_ffs.c Thu Jan 20 09:44:19 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: scan_ffs.c,v 1.33 2022/01/19 01:40:05 mrg Exp $ */
+/* $NetBSD: scan_ffs.c,v 1.34 2022/01/20 14:44:19 christos 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.33 2022/01/19 01:40:05 mrg Exp $");
+__RCSID("$NetBSD: scan_ffs.c,v 1.34 2022/01/20 14:44:19 christos Exp $");
#endif /* not lint */
#include <sys/types.h>
@@ -57,6 +57,7 @@ __RCSID("$NetBSD: scan_ffs.c,v 1.33 2022
#include <string.h>
#include <err.h>
#include <util.h>
+#include <paths.h>
#define BLK_CNT (blk + (n / 512))
@@ -381,6 +382,29 @@ lfs_checkmagic(struct sblockinfo *sbinfo
}
}
+static void
+show_status(uintmax_t beg, uintmax_t total)
+{
+ static int ttyfd = -2;
+ char buf[2048];
+ const uintmax_t done = blk - beg;
+ const double pcent = (100.0 * done) / total;
+ int n;
+
+ if (ttyfd == -2)
+ ttyfd = open(_PATH_TTY, O_RDWR, O_CLOEXEC);
+
+ if (ttyfd == -1)
+ return;
+
+ n = snprintf(buf, sizeof(buf), "%s: done %ju of %ju blocks (%3.2f%%)\n",
+ getprogname(), done, total, pcent);
+
+ if (n <= 0)
+ return;
+ write(ttyfd, buf, (size_t)n);
+}
+
static int
scan_disk(int fd, daddr_t beg, daddr_t end, int fflags)
{
@@ -401,12 +425,8 @@ scan_disk(int fd, daddr_t beg, daddr_t e
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);
+ show_status(beg, 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) {