Allow the user to stick the option and its argument together.
This commit is contained in:
parent
4b43b4d558
commit
7f12601969
|
@ -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++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue