X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fopt%2Fopt.c;h=db7686be10eba44a08cec27c945aff7002a5b0fb;hp=8f67740036e7e5c5ac53bb3c2abe8d5a9ccc7fce;hb=4ea280eb94ec5f2eef352066a94a160d9b8dd059;hpb=9056c31b46452c92c7dd9c276664f514720a84c6 diff --git a/ccan/opt/opt.c b/ccan/opt/opt.c index 8f677400..db7686be 100644 --- a/ccan/opt/opt.c +++ b/ccan/opt/opt.c @@ -1,3 +1,4 @@ +/* Licensed under GPLv3+ - see LICENSE file for details */ #include #include #include @@ -150,7 +151,7 @@ void _opt_register(const char *names, enum opt_type type, char *(*cb)(void *arg), char *(*cb_arg)(const char *optarg, void *arg), void (*show)(char buf[OPT_SHOW_LEN], const void *arg), - void *arg, const char *desc) + const void *arg, const char *desc) { struct opt_table opt; opt.names = names; @@ -158,7 +159,7 @@ void _opt_register(const char *names, enum opt_type type, opt.cb = cb; opt.cb_arg = cb_arg; opt.show = show; - opt.arg = arg; + opt.u.carg = arg; opt.desc = desc; check_opt(&opt); add_opt(&opt); @@ -183,7 +184,7 @@ void opt_register_table(const struct opt_table entry[], const char *desc) } /* We store the table length in arg ptr. */ if (desc) - opt_table[start].arg = (void *)(intptr_t)(opt_count - start); + opt_table[start].u.tlen = (opt_count - start); } /* Parse your arguments. */ @@ -201,6 +202,13 @@ bool opt_parse(int *argc, char *argv[], void (*errlog)(const char *fmt, ...)) return (ret == 0); } +void opt_free_table(void) +{ + free(opt_table); + opt_table = NULL; + opt_count = opt_num_short = opt_num_short_arg = opt_num_long = 0; +} + void opt_log_stderr(const char *fmt, ...) { va_list ap;