Delete broken files if application is interrupted unless the keep-broken option is enabled, and return 1 as exit code on interruption.

This commit is contained in:
Con Kolivas 2021-02-15 17:13:57 +11:00
parent dd58a58692
commit 073cdb2175
2 changed files with 11 additions and 9 deletions

13
main.c
View file

@ -145,15 +145,10 @@ static void license(void)
static void sighandler(int sig __UNUSED__) static void sighandler(int sig __UNUSED__)
{ {
struct termios termios_p; signal(sig, SIG_IGN);
signal(SIGTERM, SIG_IGN);
/* Make sure we haven't died after disabling stdin echo */ print_err("Interrupted\n");
tcgetattr(fileno(stdin), &termios_p); fatal_exit(&local_control);
termios_p.c_lflag |= ECHO;
tcsetattr(fileno(stdin), 0, &termios_p);
unlink_files(control);
exit(0);
} }
static void show_summary(void) static void show_summary(void)

7
util.c
View file

@ -100,6 +100,13 @@ void fatal_exit(rzip_control *control)
tcsetattr(fileno(stdin), 0, &termios_p); tcsetattr(fileno(stdin), 0, &termios_p);
unlink_files(control); unlink_files(control);
if (!STDOUT && !TEST_ONLY && control->outfile) {
if (!KEEP_BROKEN) {
print_verbose("Deleting broken file %s\n", control->outfile);
unlink(control->outfile);
} else
print_verbose("Keeping broken file %s as requested\n", control->outfile);
}
fprintf(control->outputfile, "Fatal error - exiting\n"); fprintf(control->outputfile, "Fatal error - exiting\n");
fflush(control->outputfile); fflush(control->outputfile);
exit(1); exit(1);