opt: add integer helpers that accept k, M, G, T, P, E suffixes
[ccan] / ccan / opt / opt.c
index 8f67740036e7e5c5ac53bb3c2abe8d5a9ccc7fce..5aaa000b64a1cd31fd1078c021d62c4117c47146 100644 (file)
@@ -1,3 +1,4 @@
+/* Licensed under GPLv3+ - see LICENSE file for details */
 #include <ccan/opt/opt.h>
 #include <string.h>
 #include <errno.h>
@@ -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,12 @@ 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=0;
+}
+
 void opt_log_stderr(const char *fmt, ...)
 {
        va_list ap;