X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_random.c;h=0a529d401b53410f08ef97d436a6fc4b578ab1f6;hb=ba5ce99d77078a8629779641e8506b74e50fe6af;hp=d3f2ee303ff09bcd8a9dfe6d93dc19518fb451be;hpb=e16562d4f4180c1364181c92d6d8f285f322f12c;p=tfcrypt.git diff --git a/tfc_random.c b/tfc_random.c index d3f2ee3..0a529d4 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; @@ -102,13 +116,13 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) 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; @@ -129,8 +143,7 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) fd = 1; foutname = TFC_STDOUT_NAME; } - else fd = open(foutname, O_WRONLY | O_CREAT | O_LARGEFILE | write_flags, 0666); - if (fd == -1) xerror(NO, NO, YES, "%s", foutname); + else fd = xopen(foutname, O_WRONLY | O_CREAT | O_LARGEFILE | write_flags); if (offset) { if (lseek(fd, offset, SEEK_SET) == -1) @@ -181,8 +194,10 @@ _wagain: lio = xwrite(fd, pblk, lrem); } if (verbose) tfc_esay("done!"); - if (verbose || status_timer) print_crypt_status(0); - if (verbose) tfc_esay("\n"); + if (verbose || status_timer) { + print_crypt_status(0); + tfc_esay("\n"); + } xclose(fd); xexit(0);