X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfc_random.c;h=2ca459d9e56a3330104b8f82e800d290db52cdc3;hb=10fd1044fc86d4537fdc6b05320f5a3d3996727d;hp=0e90f48be408eda3a2bab9d2cec53122955dc85a;hpb=8bdb7b7f595e5fb53dbb261795844ca29c222bfd;p=tfcrypt.git diff --git a/tfc_random.c b/tfc_random.c index 0e90f48..2ca459d 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: * @@ -44,7 +44,7 @@ static void get_urandom(const char *src, void *buf, size_t size) if (fd == -1) fd = open("/dev/random", O_RDONLY); if (fd == -1) xerror(NO, YES, YES, "random source is required (tried %s)", src); -_again: rd = read(fd, ubuf, sz); +_again: rd = xread(fd, ubuf, sz); if (rd < sz && rd != NOSIZE) { ubuf += rd; sz -= rd; @@ -93,7 +93,6 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) 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); sigact.sa_handler = change_status_width; @@ -104,11 +103,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,7 +132,7 @@ 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)); @@ -148,7 +150,7 @@ void gen_write_bytes(const char *foutname, tfc_fsize offset, tfc_fsize nrbytes) if (ctr_mode != TFC_MODE_PLAIN) tfc_getrandom(srcblk, lblock); if (error_action == TFC_ERRACT_SYNC) wrpos = tfc_fdgetpos(fd); -_wagain: lio = write(fd, pblk, lrem); +_wagain: lio = xwrite(fd, pblk, lrem); if (lio == NOSIZE) { if (errno != EIO && catch_all_errors != YES) xerror(NO, NO, YES, "%s", foutname);