|
@@ -115,32 +115,53 @@ clear_read_error_count (void)
|
|
|
read_error_count = 0;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+/* Time-related functions */
|
|
|
+
|
|
|
+double duration;
|
|
|
+
|
|
|
void
|
|
|
-print_total_written (void)
|
|
|
+set_start_time ()
|
|
|
{
|
|
|
- tarlong written = prev_written + bytes_written;
|
|
|
- char bytes[sizeof (tarlong) * CHAR_BIT];
|
|
|
- char abbr[LONGEST_HUMAN_READABLE + 1];
|
|
|
- char rate[LONGEST_HUMAN_READABLE + 1];
|
|
|
- double seconds;
|
|
|
- int human_opts = human_autoscale | human_base_1024 | human_SI | human_B;
|
|
|
+#if HAVE_CLOCK_GETTIME
|
|
|
+ if (clock_gettime (CLOCK_REALTIME, &start_timespec) != 0)
|
|
|
+#endif
|
|
|
+ start_time = time (0);
|
|
|
+}
|
|
|
|
|
|
+void
|
|
|
+compute_duration ()
|
|
|
+{
|
|
|
#if HAVE_CLOCK_GETTIME
|
|
|
struct timespec now;
|
|
|
if (clock_gettime (CLOCK_REALTIME, &now) == 0)
|
|
|
- seconds = ((now.tv_sec - start_timespec.tv_sec)
|
|
|
- + (now.tv_nsec - start_timespec.tv_nsec) / 1e9);
|
|
|
+ duration += ((now.tv_sec - start_timespec.tv_sec)
|
|
|
+ + (now.tv_nsec - start_timespec.tv_nsec) / 1e9);
|
|
|
else
|
|
|
#endif
|
|
|
- seconds = time (0) - start_time;
|
|
|
+ duration += time (NULL) - start_time;
|
|
|
+ set_start_time ();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+void
|
|
|
+print_total_written (void)
|
|
|
+{
|
|
|
+ tarlong written = prev_written + bytes_written;
|
|
|
+ char bytes[sizeof (tarlong) * CHAR_BIT];
|
|
|
+ char abbr[LONGEST_HUMAN_READABLE + 1];
|
|
|
+ char rate[LONGEST_HUMAN_READABLE + 1];
|
|
|
+
|
|
|
+ int human_opts = human_autoscale | human_base_1024 | human_SI | human_B;
|
|
|
|
|
|
sprintf (bytes, TARLONG_FORMAT, written);
|
|
|
|
|
|
/* Amanda 2.4.1p1 looks for "Total bytes written: [0-9][0-9]*". */
|
|
|
fprintf (stderr, _("Total bytes written: %s (%s, %s/s)\n"), bytes,
|
|
|
human_readable (written, abbr, human_opts, 1, 1),
|
|
|
- (0 < seconds && written / seconds < (uintmax_t) -1
|
|
|
- ? human_readable (written / seconds, rate, human_opts, 1, 1)
|
|
|
+ (0 < duration && written / duration < (uintmax_t) -1
|
|
|
+ ? human_readable (written / duration, rate, human_opts, 1, 1)
|
|
|
: "?"));
|
|
|
}
|
|
|
|
|
@@ -934,7 +955,8 @@ close_archive (void)
|
|
|
|
|
|
sys_drain_input_pipe ();
|
|
|
|
|
|
- if (verify_option)
|
|
|
+ compute_duration ();
|
|
|
+ if (verify_option)
|
|
|
verify_volume ();
|
|
|
|
|
|
if (rmtclose (archive) != 0)
|