X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fopt%2Fopt.h;h=9eec73854bb144f9051484578ff67f1af94ac386;hb=4bfa8587c9b7c8450320232837c6481d07ce77f6;hp=690907e595eff6922690204eb4c76a6be3e59d8c;hpb=c7a7fc0a1771394534cafaa7c30aa215631efc82;p=ccan diff --git a/ccan/opt/opt.h b/ccan/opt/opt.h index 690907e5..9eec7385 100644 --- a/ccan/opt/opt.h +++ b/ccan/opt/opt.h @@ -185,7 +185,7 @@ void opt_register_table(const struct opt_table *table, const char *desc); * string (or see opt_set_alloc) and return false. * * Example: - * static char *explode(const char *optarg, void *unused) + * static char *explode(const char *optarg, void *unused UNNEEDED) * { * errx(1, "BOOM! %s", optarg); * } @@ -228,6 +228,15 @@ void opt_register_table(const struct opt_table *table, const char *desc); _opt_register((names), OPT_CB_ARG((cb), OPT_EARLY, (show),(arg)), \ (arg), (desc)) +/** + * opt_unregister - unregister an option. + * @names: the names it was registered with. + * + * This undoes opt_register[_early]_[no]arg. Returns true if the option was + * found, otherwise false. + */ +bool opt_unregister(const char *names); + /** * opt_parse - parse arguments. * @argc: pointer to argc @@ -286,6 +295,30 @@ bool opt_parse(int *argc, char *argv[], void (*errlog)(const char *fmt, ...)); bool opt_early_parse(int argc, char *argv[], void (*errlog)(const char *fmt, ...)); +/** + * opt_early_parse_incomplete - parse early arguments, ignoring unknown ones. + * @argc: argc + * @argv: argv array. + * @errlog: the function to print errors + * + * If you have plugins, you might need to do early parsing (eg. to find the + * plugin directory) but you don't know what options the plugins will want. + * + * Thus, this function is just like opt_early_parse, but ignores unknown options. + * + * Example: + * if (!opt_early_parse_incomplete(argc, argv, opt_log_stderr)) { + * printf("You screwed up, aborting!\n"); + * exit(1); + * } + * + * See Also: + * opt_early_parse() + */ +bool opt_early_parse_incomplete(int argc, char *argv[], + void (*errlog)(const char *fmt, ...)); + + /** * opt_free_table - reset the opt library. * @@ -476,6 +509,30 @@ char *opt_version_and_exit(const char *version); /* Display usage string to stdout, exit(0). */ char *opt_usage_and_exit(const char *extra); +/** + * opt_find_long: low-level access to the parser + * @arg: string of form 'arg' or 'arg=val'. + * @optarg: set to `val` of present in arg, otherwise NULL. Can be NULL. + * + * Returns NULL if option is unknown. Sets *@optarg to NULL if + * there's no '='. + */ +struct opt_table *opt_find_long(const char *arg, const char **optarg); + +/** + * opt_find_short: low-level access to the parser + * @arg: character representing short option + * + * Returns NULL if option is unknown. + */ +struct opt_table *opt_find_short(char arg); + +/* opt_type bits reserved for users to play with (ignored!). + * You can set bits in type e.g. (1<