From f1de64db39f6344d49afaee5ca4a619ad7622aa2 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 27 May 2006 13:23:37 +0200 Subject: [PATCH] wrc: Clean output files when aborting on an error or signal. --- tools/wrc/wrc.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tools/wrc/wrc.c b/tools/wrc/wrc.c index 42675f04f33..a5c46efc02c 100644 --- a/tools/wrc/wrc.c +++ b/tools/wrc/wrc.c @@ -171,7 +171,7 @@ int yy_flex_debug; resource_t *resource_top; /* The top of the parsed resources */ int getopt (int argc, char *const *argv, const char *optstring); -static void rm_tempfile(void); +static void cleanup_files(void); static void segvhandler(int sig); static const char* short_options = @@ -226,6 +226,12 @@ static void set_version_defines(void) free( version ); } +/* clean things up when aborting on a signal */ +static void exit_on_signal( int sig ) +{ + exit(1); /* this will call the atexit functions */ +} + int main(int argc,char *argv[]) { extern char* optarg; @@ -239,6 +245,11 @@ int main(int argc,char *argv[]) int cmdlen; signal(SIGSEGV, segvhandler); + signal( SIGTERM, exit_on_signal ); + signal( SIGINT, exit_on_signal ); +#ifdef SIGHUP + signal( SIGHUP, exit_on_signal ); +#endif now = time(NULL); @@ -430,6 +441,7 @@ int main(int argc,char *argv[]) output_name = dup_basename(input_name, ".rc"); strcat(output_name, ".res"); } + atexit(cleanup_files); /* Run the preprocessor on the input */ if(!no_preprocess) @@ -443,7 +455,6 @@ int main(int argc,char *argv[]) if (!preprocess_only) { - atexit(rm_tempfile); ret = wpp_parse_temp( input_name, output_name, &temp_name ); } else if (output_name) @@ -464,7 +475,10 @@ int main(int argc,char *argv[]) exit(1); /* Error during preprocess */ if(preprocess_only) + { + output_name = NULL; exit(0); + } input_name = temp_name; } @@ -495,15 +509,16 @@ int main(int argc,char *argv[]) chat("Writing .res-file"); write_resfile(output_name, resource_top); + output_name = NULL; return 0; } -static void rm_tempfile(void) +static void cleanup_files(void) { - if(temp_name) - unlink(temp_name); + if (output_name) unlink(output_name); + if (temp_name) unlink(temp_name); } static void segvhandler(int sig)