summaryrefslogtreecommitdiff
path: root/bin/dd/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'bin/dd/misc.c')
-rw-r--r--bin/dd/misc.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/bin/dd/misc.c b/bin/dd/misc.c
index cd1db9e0386b..e778f275fcef 100644
--- a/bin/dd/misc.c
+++ b/bin/dd/misc.c
@@ -56,6 +56,8 @@ __FBSDID("$FreeBSD$");
#include "dd.h"
#include "extern.h"
+static int need_newline;
+
double
secs_elapsed(void)
{
@@ -83,6 +85,9 @@ summary(void)
if (ddflags & C_NOINFO)
return;
+ if (need_newline && !need_summary)
+ fprintf(stderr, "\n");
+
secs = secs_elapsed();
(void)fprintf(stderr,
@@ -102,6 +107,28 @@ summary(void)
need_summary = 0;
}
+void
+progress(void)
+{
+ double secs;
+ static int lastlen;
+ int len;
+
+ secs = secs_elapsed();
+ len = fprintf(stderr,
+ "\r%ju bytes transferred in %.0f secs (%.0f bytes/sec)",
+ st.bytes, secs, st.bytes / secs);
+
+ if (len > 0) {
+ if (len < lastlen)
+ (void)fprintf(stderr, "%*s", len - lastlen, "");
+ lastlen = len;
+ }
+
+ need_newline = 1;
+ need_progress = 0;
+}
+
/* ARGSUSED */
void
siginfo_handler(int signo __unused)
@@ -112,6 +139,14 @@ siginfo_handler(int signo __unused)
/* ARGSUSED */
void
+sigalrm_handler(int signo __unused)
+{
+
+ need_progress = 1;
+}
+
+/* ARGSUSED */
+void
terminate(int sig)
{