X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_random.c;h=ccafe5c28dc6e56da5209f7e6790c0f154af56bd;hb=44bb43b90d7aad1878b20b6c9df848b998820374;hp=7c7b0b911d1564b9284c0e2bbc498d4c47429d32;hpb=429747d78e7e60b3dc44fd8b23f1626c386663e0;p=tfcrypt.git diff --git a/tfc_random.c b/tfc_random.c index 7c7b0b9..ccafe5c 100644 --- a/tfc_random.c +++ b/tfc_random.c @@ -2,7 +2,7 @@ * tfcrypt -- high security Threefish encryption tool. * * tfcrypt is copyrighted: - * Copyright (C) 2012-2018 Andrey Rys. All rights reserved. + * Copyright (C) 2012-2019 Andrey Rys. All rights reserved. * * tfcrypt is licensed to you under the terms of std. MIT/X11 license: * @@ -88,14 +88,15 @@ 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(SIGTSTP, &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; @@ -104,11 +105,14 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) sigact.sa_handler = print_crypt_status; sigaction(SIGINT, &sigact, NULL); sigaction(SIGTERM, &sigact, NULL); + sigaction(SIGTSTP, &sigact, NULL); } else { sigact.sa_handler = exit_sigterm; sigaction(SIGINT, &sigact, NULL); sigaction(SIGTERM, &sigact, NULL); + sigact.sa_handler = handle_sigtstp; + sigaction(SIGTSTP, &sigact, NULL); } memset(&sigact, 0, sizeof(struct sigaction)); @@ -130,13 +134,13 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) if (offset) { if (lseek(fd, offset, SEEK_SET) == -1) - xerror(YES, NO, NO, "%s: seek failed", foutname); + xerror(ignore_seek_errors, NO, NO, "%s: seek failed", foutname); } 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; @@ -177,7 +181,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);