Module: wine Branch: master Commit: cb9be96437a82639e61b712721bf89ec6b62a2df URL: http://source.winehq.org/git/wine.git/?a=commit;h=cb9be96437a82639e61b712721...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Mar 30 15:33:54 2010 +0200
wrc: Move temp file management from wpp directly into the load_file function.
---
tools/wrc/wrc.c | 52 +++++++++++++++++++++++++++++++--------------------- 1 files changed, 31 insertions(+), 21 deletions(-)
diff --git a/tools/wrc/wrc.c b/tools/wrc/wrc.c index 931af46..2919d38 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 */