diff options
Diffstat (limited to 'parse-options.h')
-rw-r--r-- | parse-options.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/parse-options.h b/parse-options.h index 3006a769cd..2b8e7624d6 100644 --- a/parse-options.h +++ b/parse-options.h @@ -7,12 +7,20 @@ enum parse_opt_type { OPTION_BOOLEAN, OPTION_STRING, OPTION_INTEGER, + OPTION_CALLBACK, }; enum parse_opt_flags { PARSE_OPT_KEEP_DASHDASH = 1, }; +enum parse_opt_option_flags { + PARSE_OPT_OPTARG = 1, +}; + +struct option; +typedef int parse_opt_cb(const struct option *, const char *arg, int unset); + struct option { enum parse_opt_type type; int short_name; @@ -20,6 +28,12 @@ struct option { void *value; const char *argh; const char *help; + + int flags; + parse_opt_cb *callback; + /* holds default value for PARSE_OPT_OPTARG, + though callbacks can use it like they want */ + intptr_t defval; }; #define OPT_END() { OPTION_END } @@ -27,6 +41,8 @@ struct option { #define OPT_BOOLEAN(s, l, v, h) { OPTION_BOOLEAN, (s), (l), (v), NULL, (h) } #define OPT_INTEGER(s, l, v, h) { OPTION_INTEGER, (s), (l), (v), NULL, (h) } #define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) } +#define OPT_CALLBACK(s, l, v, a, h, f) \ + { OPTION_CALLBACK, (s), (l), (v), (a), (h), 0, (f) } /* parse_options() will filter out the processed options and leave the * non-option argments in argv[]. |