[vlc-devel] commit: getopt: remove optional argument support ( Rémi Denis-Courmont )
git version control
git at videolan.org
Sun Feb 28 16:02:24 CET 2010
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Feb 28 16:10:34 2010 +0200| [68f6af6e769cd3022861c421a15a610b6227a301] | committer: Rémi Denis-Courmont
getopt: remove optional argument support
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=68f6af6e769cd3022861c421a15a610b6227a301
---
src/config/cmdline.c | 7 ++---
src/config/getopt.c | 59 +++++++++++++++-------------------------------
src/config/vlc_getopt.h | 15 ++---------
3 files changed, 25 insertions(+), 56 deletions(-)
diff --git a/src/config/cmdline.c b/src/config/cmdline.c
index c721c45..73e51af 100644
--- a/src/config/cmdline.c
+++ b/src/config/cmdline.c
@@ -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++;
diff --git a/src/config/getopt.c b/src/config/getopt.c
index 08753f7..e1db101 100644
--- a/src/config/getopt.c
+++ b/src/config/getopt.c
@@ -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;
}
diff --git a/src/config/vlc_getopt.h b/src/config/vlc_getopt.h
index e6bf78d..72b2341 100644
--- a/src/config/vlc_getopt.h
+++ b/src/config/vlc_getopt.h
@@ -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);
More information about the vlc-devel
mailing list