-o: accept "-" as name, do nothing (leave stderr as is)
[tfcrypt.git] / tfc_signal.c
index 659e9381ec181514d8cddacf785ad79ef898f03c..b0d6e482f1bb7fabb82ae0f5df6b7bad60848fe0 100644 (file)
@@ -33,11 +33,23 @@ void exit_sigterm(int signal)
        xexit(0);
 }
 
+void handle_sigtstp(int signal)
+{
+       if (signal == SIGTSTP) {
+               tfc_useconds freeze_start, freeze_end;
+
+               tfc_getcurtime(&freeze_start);
+               kill(getpid(), SIGSTOP);
+               tfc_getcurtime(&freeze_end);
+               total_time -= (freeze_end - freeze_start);
+       }
+}
+
 void print_crypt_status(int signal)
 {
        tfc_fsize wr_speed;
-       double seconds, human_totalproc_src, human_totalproc_dst, human_wr_speed;
-       int src_scale_idx, dst_scale_idx, wr_speed_scale;
+       double seconds, human_totalproc_src, human_totalproc_dst, human_totalwrit_dst, human_wr_speed;
+       int src_scale_idx, dst_scale_idx, wri_scale_idx, wr_speed_scale;
        const char *oper_mode, *inplace;
        static tfc_yesno last;
 
@@ -64,6 +76,7 @@ void print_crypt_status(int signal)
        wr_speed = delta_processed / seconds;
        tfc_describescale(total_processed_src, &human_totalproc_src, &src_scale_idx);
        tfc_describescale(total_processed_dst, &human_totalproc_dst, &dst_scale_idx);
+       tfc_describescale(total_written_dst, &human_totalwrit_dst, &wri_scale_idx);
        tfc_describescale(wr_speed, &human_wr_speed, &wr_speed_scale);
 
        if (bench_timer) {
@@ -73,8 +86,7 @@ void print_crypt_status(int signal)
                        "avg. speed %llu (%.2f%s) B/s, time %.4fs.",
                        oper_mode,
                        total_processed_src, human_totalproc_src, tfc_getscale(src_scale_idx),
-                       wr_speed, human_wr_speed, tfc_getscale(wr_speed_scale),
-                       TFC_UTODSECS(current_time - delta_time));
+                       wr_speed, human_wr_speed, tfc_getscale(wr_speed_scale), seconds);
                tfc_esay("\n");
                xexit(0);
        }
@@ -83,30 +95,32 @@ void print_crypt_status(int signal)
        else inplace = "";
 
        if (do_less_stats == YES) {
-               tfc_nfsay(stderr, "%s%s:"
+               tfc_nfsay(stderr, "%s%s%s:"
                        " %s %.2f%s,"
                        " %.2f%s B/s @%s",
-                       inplace, progname,
+                       inplace, (last && show_when_done) ? "finished: " : "", progname,
                        oper_mode,
                        human_totalproc_dst, tfc_getscale(dst_scale_idx),
                        human_wr_speed, tfc_getscale(wr_speed_scale), tfc_format_time(total_time));
        }
        else {
-               if (ctr_mode <= TFC_MODE_PLAIN) tfc_nfsay(stderr, "%s%s: read: %llu (%.2f%s),"
+               if (ctr_mode <= TFC_MODE_PLAIN) tfc_nfsay(stderr, "%s%s%s: read: %llu (%.2f%s),"
                        " %s %llu (%.2f%s) bytes,"
                        " (%llu (%.2f%s) B/s), time %s",
-                       inplace, progname,
+                       inplace, (last && show_when_done) ? "finished: " : "", progname,
                        total_processed_src, human_totalproc_src, tfc_getscale(src_scale_idx),
                        oper_mode,
                        total_processed_dst, human_totalproc_dst, tfc_getscale(dst_scale_idx),
                        wr_speed, human_wr_speed, tfc_getscale(wr_speed_scale), tfc_format_time(total_time));
-               else tfc_nfsay(stderr, "%s%s: read: %llu (%.2f%s),"
+               else tfc_nfsay(stderr, "%s%s%s: read: %llu (%.2f%s),"
                        " %s %s %llu (%.2f%s) bytes,"
+                       " written %llu (%.2f%s) bytes,"
                        " (%llu (%.2f%s) B/s), time %s",
-                       inplace, progname,
+                       inplace, (last && show_when_done) ? "finished: " : "", progname,
                        total_processed_src, human_totalproc_src, tfc_getscale(src_scale_idx),
                        tfc_modename(ctr_mode), oper_mode,
                        total_processed_dst, human_totalproc_dst, tfc_getscale(dst_scale_idx),
+                       total_written_dst, human_totalwrit_dst, tfc_getscale(wri_scale_idx),
                        wr_speed, human_wr_speed, tfc_getscale(wr_speed_scale), tfc_format_time(total_time));
        }
 
@@ -122,7 +136,7 @@ void print_crypt_status(int signal)
        delta_processed = 0;
        tfc_getcurtime(&delta_time);
 
-       if (signal == SIGTSTP) kill(getpid(), SIGSTOP);
+       handle_sigtstp(signal);
 
        if (status_timer) setup_next_alarm(status_timer);
 }