X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_random.c;h=9ef321d43304e51fbe35ce29c301d13339a64877;hb=2a9a13e951cb7bcc4d81b3e6f1e23c5185ec77af;hp=2ca459d9e56a3330104b8f82e800d290db52cdc3;hpb=10fd1044fc86d4537fdc6b05320f5a3d3996727d;p=tfcrypt.git diff --git a/tfc_random.c b/tfc_random.c index 2ca459d..9ef321d 100644 --- a/tfc_random.c +++ b/tfc_random.c @@ -28,6 +28,20 @@ #include "tfcrypt.h" +static void print_crypt_status_genrnd(int signal) +{ + if (signal == SIGTERM || signal == SIGINT) { + if (xexit_no_nl == YES) xexit_no_nl = NO; + } + print_crypt_status(signal); +} + +static void exit_sigterm_genrnd(int signal) +{ + if (xexit_no_nl == YES) xexit_no_nl = NO; + exit_sigterm(signal); +} + static void get_urandom(const char *src, void *buf, size_t size) { tfc_byte *ubuf = buf; @@ -88,25 +102,27 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) size_t lblock, lio, lrem; tfc_byte *pblk; + xexit_no_nl = YES; + for (x = 1; x < NSIG; x++) signal(x, SIG_IGN); memset(&sigact, 0, sizeof(sigact)); sigact.sa_flags = SA_RESTART; sigact.sa_handler = print_crypt_status; sigaction(SIGUSR1, &sigact, NULL); sigaction(SIGALRM, &sigact, NULL); - if (status_timer) setup_next_alarm(status_timer); + if (status_timer) setup_next_alarm(status_timer > 1000000 ? 1000000 : status_timer); sigact.sa_handler = change_status_width; sigaction(SIGQUIT, &sigact, NULL); sigact.sa_handler = change_status_timer; sigaction(SIGUSR2, &sigact, NULL); if (quiet == NO) { - sigact.sa_handler = print_crypt_status; + sigact.sa_handler = print_crypt_status_genrnd; sigaction(SIGINT, &sigact, NULL); sigaction(SIGTERM, &sigact, NULL); sigaction(SIGTSTP, &sigact, NULL); } else { - sigact.sa_handler = exit_sigterm; + sigact.sa_handler = exit_sigterm_genrnd; sigaction(SIGINT, &sigact, NULL); sigaction(SIGTERM, &sigact, NULL); sigact.sa_handler = handle_sigtstp; @@ -138,7 +154,7 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) if (ctr_mode == TFC_MODE_PLAIN) memset(srcblk, 0, sizeof(srcblk)); if (verbose) tfc_nfsay(stderr, "%s: writing %lld bytes to %s ... ", - progname, nrbytes, foutname); + tfc_format_pid(progname), nrbytes, foutname); errno = 0; do_stop = NO; @@ -179,7 +195,10 @@ _wagain: lio = xwrite(fd, pblk, lrem); } if (verbose) tfc_esay("done!"); - if (verbose || status_timer) print_crypt_status(0); + if (verbose || status_timer) { + print_crypt_status(0); + tfc_esay("\n"); + } xclose(fd); xexit(0);