Allow the user to stick the option and its argument together.

This commit is contained in:
Francois Gouget 2000-11-15 23:12:06 +00:00 committed by Alexandre Julliard
parent 4b43b4d558
commit 7f12601969
1 changed files with 24 additions and 5 deletions

View File

@ -167,21 +167,40 @@ static void do_lib( const char *arg )
static void parse_options( char *argv[] ) static void parse_options( char *argv[] )
{ {
const struct option *opt; const struct option *opt;
int i; char * const * ptr;
const char* arg=NULL;
for (i = 1; argv[i]; i++) ptr=argv+1;
while (*ptr != NULL)
{ {
for (opt = option_table; opt->name; opt++) for (opt = option_table; opt->name; opt++)
if (!strcmp( argv[i], opt->name )) break; {
if (opt->has_arg && !strncmp( *ptr, opt->name, strlen(opt->name) ))
{
arg=*ptr+strlen(opt->name);
if (*arg=='\0')
{
ptr++;
arg=*ptr;
}
break;
}
if (!strcmp( *ptr, opt->name ))
{
arg=NULL;
break;
}
}
if (!opt->name) if (!opt->name)
{ {
fprintf( stderr, "Unrecognized option '%s'\n", argv[i] ); fprintf( stderr, "Unrecognized option '%s'\n", *ptr );
do_usage(); do_usage();
} }
if (opt->has_arg && argv[i+1]) opt->func( argv[++i] ); if (opt->has_arg && arg!=NULL) opt->func( arg );
else opt->func( "" ); else opt->func( "" );
ptr++;
} }
} }