"Robin H. Johnson" <robbat2@xxxxxxxxxx> writes: > +static int verbose; > + > +static int parse_options_cmd_bundle(int argc, > + const char **argv, > + const char* prefix, > + const char * const usagestr[], > + const struct option options[], > + const char **bundle_file) { > + int newargc; > + newargc = parse_options(argc, argv, NULL, options, usagestr, > + PARSE_OPT_STOP_AT_NON_OPTION); > + if (argc < 1) > + usage_with_options(usagestr, options); > + *bundle_file = prefix_filename(prefix, argv[0]); > + return newargc; > +} Looks like a useful helper to be shared among subcommands. > +static int cmd_bundle_create(int argc, const char **argv, const char *prefix) { > + struct option options[] = { > + OPT_END() > + }; > + const char* bundle_file; > ... > +int cmd_bundle(int argc, const char **argv, const char *prefix) > +{ > + struct option options[] = { > + OPT__VERBOSE(&verbose, N_("be verbose; must be placed before a subcommand")), > + OPT_END() > + }; > + int result; > + > + argc = parse_options(argc, argv, prefix, options, builtin_bundle_usage, > + PARSE_OPT_STOP_AT_NON_OPTION); Looks like a reasonable arrangement for two-level option parser.