Patrick Steinhardt <ps@xxxxxx> writes: > @@ -910,6 +930,20 @@ int cmd_config(int argc, const char **argv, const char *prefix) > { > given_config_source.file = xstrdup_or_null(getenv(CONFIG_ENVIRONMENT)); > > + /* > + * This is somewhat hacky: we first parse the command line while > + * keeping all args intact in order to determine whether a subcommand > + * has been specified. If so, we re-parse it a second time, but this > + * time we drop KEEP_ARGV0. This is so that we don't munge the command > + * line in case no subcommand was given, which would otherwise confuse > + * us when parsing the implicit modes. > + */ > + argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, > + PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_ARGV0|PARSE_OPT_KEEP_UNKNOWN_OPT); > + if (subcommand) > + argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage, > + PARSE_OPT_SUBCOMMAND_OPTIONAL|PARSE_OPT_KEEP_UNKNOWN_OPT); > + I wonder if we can drop the PARSE_OPT_SUBCOMMAND_OPTIONAL in the second iteration to make it stricter. But this is OK.
Attachment:
signature.asc
Description: PGP signature