From cb9be96437a82639e61b712721bf89ec6b62a2df Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 30 Mar 2010 15:33:54 +0200 Subject: [PATCH] wrc: Move temp file management from wpp directly into the load_file function. --- tools/wrc/wrc.c | 52 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/tools/wrc/wrc.c b/tools/wrc/wrc.c index 931af46566a..2919d383626 100644 --- a/tools/wrc/wrc.c +++ b/tools/wrc/wrc.c @@ -256,40 +256,50 @@ static int load_file( const char *input_name, const char *output_name ) /* Run the preprocessor on the input */ if(!no_preprocess) { + FILE *output; + int ret, fd; + char *name; + /* * Preprocess the input to a temp-file, or stdout if * no output was given. */ - chat("Starting preprocess\n"); - - if (!preprocess_only) - { - ret = wpp_parse_temp( input_name, output_name, &temp_name ); - } - else if (output_name) + if (preprocess_only) { - FILE *output; + if (output_name) + { + if (!(output = fopen( output_name, "w" ))) + fatal_perror( "Could not open %s for writing", output_name ); + ret = wpp_parse( input_name, output ); + fclose( output ); + } + else ret = wpp_parse( input_name, stdout ); - if (!(output = fopen( output_name, "w" ))) - fatal_perror( "Could not open %s for writing", output_name ); - ret = wpp_parse( input_name, output ); - fclose( output ); + if (ret) return ret; + output_name = NULL; + exit(0); } - else + + if (output_name && output_name[0]) { - ret = wpp_parse( input_name, stdout ); + name = xmalloc( strlen(output_name) + 8 ); + strcpy( name, output_name ); + strcat( name, ".XXXXXX" ); } + else name = xstrdup( "wrc.XXXXXX" ); - if (ret) return ret; + if ((fd = mkstemps( name, 0 )) == -1) + error("Could not generate a temp name from %s\n", name); - if(preprocess_only) - { - output_name = NULL; - exit(0); - } + temp_name = name; + if (!(output = fdopen(fd, "wt"))) + error("Could not open fd %s for writing\n", name); - input_name = temp_name; + ret = wpp_parse( input_name, output ); + fclose( output ); + if (ret) return ret; + input_name = name; } /* Reset the language */ -- 2.11.4.GIT