Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/bin/mv add SIGINFO for mv(1), largely based upon the support...
details: https://anonhg.NetBSD.org/src/rev/1050bb02d639
branches: trunk
changeset: 343838:1050bb02d639
user: mrg <mrg%NetBSD.org@localhost>
date: Sun Feb 28 10:59:29 2016 +0000
description:
add SIGINFO for mv(1), largely based upon the support in cp(1).
diffstat:
bin/mv/mv.c | 30 ++++++++++++++++++++++++++----
1 files changed, 26 insertions(+), 4 deletions(-)
diffs (82 lines):
diff -r e082155c5348 -r 1050bb02d639 bin/mv/mv.c
--- a/bin/mv/mv.c Sun Feb 28 02:56:39 2016 +0000
+++ b/bin/mv/mv.c Sun Feb 28 10:59:29 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mv.c,v 1.44 2015/03/02 03:17:24 enami Exp $ */
+/* $NetBSD: mv.c,v 1.45 2016/02/28 10:59:29 mrg Exp $ */
/*
* Copyright (c) 1989, 1993, 1994
@@ -42,7 +42,7 @@
#if 0
static char sccsid[] = "@(#)mv.c 8.2 (Berkeley) 4/2/94";
#else
-__RCSID("$NetBSD: mv.c,v 1.44 2015/03/02 03:17:24 enami Exp $");
+__RCSID("$NetBSD: mv.c,v 1.45 2016/02/28 10:59:29 mrg Exp $");
#endif
#endif /* not lint */
@@ -67,12 +67,20 @@
static int fflg, iflg, vflg;
static int stdin_ok;
+static sig_atomic_t pinfo;
static int copy(char *, char *);
static int do_move(char *, char *);
static int fastcopy(char *, char *, struct stat *);
__dead static void usage(void);
+static void
+progress(int sig __unused)
+{
+
+ pinfo++;
+}
+
int
main(int argc, char *argv[])
{
@@ -109,6 +117,8 @@
stdin_ok = isatty(STDIN_FILENO);
+ (void)signal(SIGINFO, progress);
+
/*
* If the stat on the target fails or the target isn't a directory,
* try the move. More than 2 arguments is an error in this case.
@@ -262,7 +272,9 @@
#endif
static blksize_t blen;
static char *bp;
- int nread, from_fd, to_fd;
+ int from_fd, to_fd;
+ ssize_t nread;
+ off_t total = 0;
if ((from_fd = open(from, O_RDONLY, 0)) < 0) {
warn("%s", from);
@@ -281,11 +293,21 @@
(void)close(to_fd);
return (1);
}
- while ((nread = read(from_fd, bp, blen)) > 0)
+ while ((nread = read(from_fd, bp, blen)) > 0) {
if (write(to_fd, bp, nread) != nread) {
warn("%s", to);
goto err;
}
+ total += nread;
+ if (pinfo) {
+ int pcent = (int)((100.0 * total) / sbp->st_size);
+
+ pinfo = 0;
+ (void)fprintf(stderr, "%s => %s %llu/%llu bytes %d%% "
+ "written\n", from, to, (unsigned long long)total,
+ (unsigned long long)sbp->st_size, pcent);
+ }
+ }
if (nread < 0) {
warn("%s", from);
err: if (unlink(to))
Home |
Main Index |
Thread Index |
Old Index