X-Git-Url: https://jxself.org/git/?p=tfcrypt.git;a=blobdiff_plain;f=tfc_signal.c;h=a81aa1efcd85d9faa1d16d1bfef5eab5dcb7c566;hp=659e9381ec181514d8cddacf785ad79ef898f03c;hb=HEAD;hpb=a874fa08a172c1d5006d15d05e494e1b9fbda211 diff --git a/tfc_signal.c b/tfc_signal.c index 659e938..a81aa1e 100644 --- a/tfc_signal.c +++ b/tfc_signal.c @@ -30,25 +30,43 @@ void exit_sigterm(int signal) { + tfc_esay("\n"); 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; + tfc_yesno finished = NO; if (last == YES) return; - if (signal == 0 || signal == -1) last = YES; + if (signal == TFC_SIGLAST) { + last = YES; + finished = YES; + } switch (do_edcrypt) { case TFC_DO_ENCRYPT: oper_mode = "encrypted"; break; case TFC_DO_DECRYPT: oper_mode = "decrypted"; break; default: if (ctr_mode == TFC_MODE_PLAIN) oper_mode = "written"; + else if (ctr_mode == TFC_MODE_XOR) oper_mode = "xored"; else if (ctr_mode == TFC_MODE_SKSUM) oper_mode = "hashed"; else oper_mode = NULL; break; @@ -64,18 +82,17 @@ 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) { tfc_say("done!"); - tfc_say("%s %s benchmark results:", progname, tfc_modename(ctr_mode)); + tfc_say("%s %s benchmark results:", tfc_format_pid(progname), tfc_modename(ctr_mode)); tfc_nfsay(stdout, "%s %llu (%.2f%s) bytes, " "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)); - tfc_esay("\n"); + wr_speed, human_wr_speed, tfc_getscale(wr_speed_scale), seconds); xexit(0); } @@ -83,46 +100,45 @@ 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, (finished && show_when_done) ? "finished: " : "", tfc_format_pid(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, (finished && show_when_done) ? "finished: " : "", tfc_format_pid(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, (finished && show_when_done) ? "finished: " : "", tfc_format_pid(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)); } if (do_stop == NO && do_statline_dynamic == NO) tfc_esay("\n"); - if (last) tfc_esay("\n"); + else if (signal == TFC_SIGLAST || signal == TFC_SIGERR) tfc_esay("\n"); statline_was_shown = YES; - if ((signal == SIGINT || signal == SIGTERM) && do_stop == YES) { - tfc_esay("\n"); - exit_sigterm(signal); - } + if ((signal == SIGINT || signal == SIGTERM) && do_stop == YES) exit_sigterm(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); } @@ -146,7 +162,7 @@ void change_status_timer(int signal) else status_timer *= 2; if (verbose) tfc_esay("%s: status timer was changed to %.2fs", - progname, TFC_UTODSECS(status_timer)); + tfc_format_pid(progname), TFC_UTODSECS(status_timer)); setup_next_alarm(status_timer); }