]> git.ozlabs.org Git - ccan/blobdiff - ccan/opt/opt.h
ccan: break out routine to parse a single long argument.
[ccan] / ccan / opt / opt.h
index 690907e595eff6922690204eb4c76a6be3e59d8c..4b5a2c6ceea137c9b4247f83b7fa6396aade88ed 100644 (file)
@@ -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,24 @@ 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);
+
 /* Below here are private declarations. */
 /* You can use this directly to build tables, but the macros will ensure
  * consistency and type safety. */