Commit 68f6af6e authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

getopt: remove optional argument support

parent 2b1c487c
......@@ -141,8 +141,7 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
p_longopts[i_index].name = strdup( p_item->psz_name );
if( p_longopts[i_index].name == NULL ) continue;
p_longopts[i_index].has_arg =
(p_item->i_type == CONFIG_ITEM_BOOL) ? no_argument :
required_argument;
(p_item->i_type != CONFIG_ITEM_BOOL);
p_longopts[i_index].flag = &flag;
p_longopts[i_index].val = 0;
i_index++;
......@@ -157,7 +156,7 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
strcat( psz_name, p_item->psz_name );
p_longopts[i_index].name = psz_name;
p_longopts[i_index].has_arg = no_argument;
p_longopts[i_index].has_arg = false;
p_longopts[i_index].flag = &flag;
p_longopts[i_index].val = 1;
i_index++;
......@@ -168,7 +167,7 @@ int config_LoadCmdLine( vlc_object_t *p_this, int *pi_argc,
strcat( psz_name, p_item->psz_name );
p_longopts[i_index].name = psz_name;
p_longopts[i_index].has_arg = no_argument;
p_longopts[i_index].has_arg = false;
p_longopts[i_index].flag = &flag;
p_longopts[i_index].val = 1;
i_index++;
......
......@@ -267,9 +267,7 @@ static const char *
If a char in OPTSTRING is followed by a colon, that means it wants an arg,
so the following text in the same ARGV-element, or the text of the following
ARGV-element, is returned in `optarg'. Two colons mean an option that
wants an optional arg; if there is text in the current ARGV-element,
it is returned in `optarg', otherwise `optarg' is set to zero.
ARGV-element, is returned in `optarg'.
If OPTSTRING starts with `-' or `+', it requests different methods of
handling the non-option ARGV-elements.
......@@ -447,8 +445,6 @@ int
optind++;
if (*nameend)
{
/* Don't test has_arg with >, because some C compilers don't
allow it to be used on enums. */
if (pfound->has_arg)
optarg = nameend + 1;
else
......@@ -459,7 +455,7 @@ int
return '?';
}
}
else if (pfound->has_arg == 1)
else if (pfound->has_arg)
{
if (optind < argc)
optarg = argv[optind++];
......@@ -575,8 +571,6 @@ int
option_index = indfound;
if (*nameend)
{
/* Don't test has_arg with >, because some C compilers don't
allow it to be used on enums. */
if (pfound->has_arg)
optarg = nameend + 1;
else
......@@ -585,7 +579,7 @@ int
return '?';
}
}
else if (pfound->has_arg == 1)
else if (pfound->has_arg)
{
if (optind < argc)
optarg = argv[optind++];
......@@ -610,42 +604,27 @@ int
}
if (temp[1] == ':')
{
if (temp[2] == ':')
/* This is an option that requires an argument. */
if (*nextchar != '\0')
{
/* This is an option that accepts an argument optionally. */
if (*nextchar != '\0')
{
optarg = nextchar;
optind++;
}
else
optarg = NULL;
nextchar = NULL;
optarg = nextchar;
/* If we end this ARGV-element by taking the rest as an arg,
we must advance to the next element now. */
optind++;
}
else
else if (optind == argc)
{
/* This is an option that requires an argument. */
if (*nextchar != '\0')
{
optarg = nextchar;
/* If we end this ARGV-element by taking the rest as an arg,
we must advance to the next element now. */
optind++;
}
else if (optind == argc)
{
optopt = c;
if (optstring[0] == ':')
c = ':';
else
c = '?';
}
optopt = c;
if (optstring[0] == ':')
c = ':';
else
/* We already incremented `optind' once;
increment it again when taking next ARGV-elt as argument. */
optarg = argv[optind++];
nextchar = NULL;
c = '?';
}
else
/* We already incremented `optind' once;
increment it again when taking next ARGV-elt as argument. */
optarg = argv[optind++];
nextchar = NULL;
}
return c;
}
......
......@@ -54,9 +54,8 @@
zero.
The field `has_arg' is:
no_argument (or 0) if the option does not take an argument,
required_argument (or 1) if the option requires an argument,
optional_argument (or 2) if the option takes an optional argument.
false if the option does not take an argument,
true if the option requires an argument.
If the field `flag' is not NULL, it points to a variable that is set
to the value given in the field `val' when the option is found, but
......@@ -72,19 +71,11 @@
struct option
{
const char *name;
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
bool has_arg;
int *flag;
int val;
};
/* Names for the values of the `has_arg' field of `struct option'. */
#define no_argument 0
#define required_argument 1
#define optional_argument 2
extern int vlc_getopt_long(int argc, char *const *argv, const char *shortopts,
const struct option *longopts, int *longind);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment