Alexandre Julliard : wrc: Clean up command line parsing for multiple files support.
Alexandre Julliard
julliard at winehq.org
Mon Jun 29 09:17:44 CDT 2009
Module: wine
Branch: master
Commit: 683dc30e820a79c5fd59971ad2467b230c8f9228
URL: http://source.winehq.org/git/wine.git/?a=commit;h=683dc30e820a79c5fd59971ad2467b230c8f9228
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Jun 29 13:12:59 2009 +0200
wrc: Clean up command line parsing for multiple files support.
---
tools/wrc/wrc.c | 70 +++++++++++++++++++++++++++++-------------------------
1 files changed, 38 insertions(+), 32 deletions(-)
diff --git a/tools/wrc/wrc.c b/tools/wrc/wrc.c
index 52267ab..61a3734 100644
--- a/tools/wrc/wrc.c
+++ b/tools/wrc/wrc.c
@@ -55,7 +55,7 @@
#endif
static const char usage[] =
- "Usage: wrc [options...] [infile[.rc|.res]] [outfile]\n"
+ "Usage: wrc [options...] [infile[.rc|.res]]\n"
" -D id[=val] Define preprocessor identifier id=val\n"
" -E Preprocess only\n"
" -F target Ignored for compatibility with windres\n"
@@ -174,29 +174,42 @@ int getopt (int argc, char *const *argv, const char *optstring);
static void cleanup_files(void);
static void segvhandler(int sig);
+enum long_options_values
+{
+ LONG_OPT_NOSTDINC = 1,
+ LONG_OPT_TMPFILE,
+ LONG_OPT_NOTMPFILE,
+ LONG_OPT_PREPROCESSOR,
+ LONG_OPT_VERSION,
+ LONG_OPT_DEBUG,
+ LONG_OPT_ENDIANESS,
+ LONG_OPT_PEDANTIC,
+ LONG_OPT_VERIFY_TRANSL
+};
+
static const char short_options[] =
"D:Ef:F:hi:I:J:l:o:O:rU:v";
static const struct option long_options[] = {
- { "debug", 1, 0, 6 },
+ { "debug", 1, 0, LONG_OPT_DEBUG },
{ "define", 1, 0, 'D' },
- { "endianess", 1, 0, 7 },
+ { "endianess", 1, 0, LONG_OPT_ENDIANESS },
{ "help", 0, 0, 'h' },
{ "include-dir", 1, 0, 'I' },
{ "input", 1, 0, 'i' },
{ "input-format", 1, 0, 'J' },
{ "language", 1, 0, 'l' },
- { "no-use-temp-file", 0, 0, 3 },
- { "nostdinc", 0, 0, 1 },
+ { "no-use-temp-file", 0, 0, LONG_OPT_NOTMPFILE },
+ { "nostdinc", 0, 0, LONG_OPT_NOSTDINC },
{ "output", 1, 0, 'o' },
{ "output-format", 1, 0, 'O' },
- { "pedantic", 0, 0, 8 },
- { "preprocessor", 1, 0, 4 },
+ { "pedantic", 0, 0, LONG_OPT_PEDANTIC },
+ { "preprocessor", 1, 0, LONG_OPT_PREPROCESSOR },
{ "target", 1, 0, 'F' },
{ "undefine", 1, 0, 'U' },
- { "use-temp-file", 0, 0, 2 },
+ { "use-temp-file", 0, 0, LONG_OPT_TMPFILE },
{ "verbose", 0, 0, 'v' },
- { "verify-translations", 0, 0, 9 },
- { "version", 0, 0, 5 },
+ { "verify-translations", 0, 0, LONG_OPT_VERIFY_TRANSL },
+ { "version", 0, 0, LONG_OPT_VERSION },
{ 0, 0, 0, 0 }
};
@@ -301,8 +314,10 @@ int main(int argc,char *argv[])
int opti = 0;
int stdinc = 1;
int lose = 0;
+ int nb_files = 0;
int i;
int cmdlen;
+ char **files = xmalloc( argc * sizeof(*files) );
signal(SIGSEGV, segvhandler);
signal( SIGTERM, exit_on_signal );
@@ -339,27 +354,27 @@ int main(int argc,char *argv[])
{
switch(optc)
{
- case 1:
+ case LONG_OPT_NOSTDINC:
stdinc = 0;
break;
- case 2:
+ case LONG_OPT_TMPFILE:
if (debuglevel) warning("--use-temp-file option not yet supported, ignored.\n");
break;
- case 3:
+ case LONG_OPT_NOTMPFILE:
if (debuglevel) warning("--no-use-temp-file option not yet supported, ignored.\n");
break;
- case 4:
+ case LONG_OPT_PREPROCESSOR:
if (strcmp(optarg, "cat") == 0) no_preprocess = 1;
else fprintf(stderr, "-P option not yet supported, ignored.\n");
break;
- case 5:
+ case LONG_OPT_VERSION:
printf(version_string);
exit(0);
break;
- case 6:
+ case LONG_OPT_DEBUG:
debuglevel = strtol(optarg, NULL, 0);
break;
- case 7:
+ case LONG_OPT_ENDIANESS:
switch(optarg[0])
{
case 'n':
@@ -379,11 +394,11 @@ int main(int argc,char *argv[])
lose++;
}
break;
- case 8:
+ case LONG_OPT_PEDANTIC:
pedantic = 1;
wpp_set_pedantic(1);
break;
- case 9:
+ case LONG_OPT_VERIFY_TRANSL:
verify_translations_mode = 1;
break;
case 'D':
@@ -399,8 +414,7 @@ int main(int argc,char *argv[])
printf(usage);
exit(0);
case 'i':
- if (!input_name) input_name = strdup(optarg);
- else error("Too many input files.\n");
+ files[nb_files++] = optarg;
break;
case 'I':
wpp_add_include_path(optarg);
@@ -483,19 +497,11 @@ int main(int argc,char *argv[])
atexit(cleanup_files);
- if (input_name) /* specified with -i option */
- {
- if(!output_name && !preprocess_only)
- {
- output_name = dup_basename(input_name, ".rc");
- strcat(output_name, ".res");
- }
- if (load_file( input_name, output_name )) exit(1);
- }
+ while (optind < argc) files[nb_files++] = argv[optind++];
- while (optind < argc)
+ for (i = 0; i < nb_files; i++)
{
- input_name = argv[optind++];
+ input_name = files[i];
if(!output_name && !preprocess_only)
{
output_name = dup_basename(input_name, ".rc");
More information about the wine-cvs
mailing list