#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;
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 = 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;
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)
xerror(ignore_seek_errors, NO, NO, "%s: seek failed", foutname);
}
- if (ctr_mode == TFC_MODE_PLAIN) memset(srcblk, 0, sizeof(srcblk));
+ if (do_edcrypt == TFC_DO_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;
pblk = srcblk;
lblock = lrem = blk_len_adj(nrbytes, total_processed_src, blksize);
- if (ctr_mode != TFC_MODE_PLAIN) tfc_getrandom(srcblk, lblock);
+ if (do_edcrypt != TFC_DO_PLAIN) tfc_getrandom(srcblk, lblock);
if (error_action == TFC_ERRACT_SYNC) wrpos = tfc_fdgetpos(fd);
_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);