X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fopt%2Ftest%2Futils.c;h=21e0b727ebd6cab4762526dc5a21a11a3eb5f072;hp=802b15381042b0dc63a26f440e54bb8c0f2b7f0c;hb=ac9d55d8c5af9697be8c4dd4f27de61e3cb8bf95;hpb=3fb6b6be5a395fbe293e61339e6be67118234508 diff --git a/ccan/opt/test/utils.c b/ccan/opt/test/utils.c index 802b1538..21e0b727 100644 --- a/ccan/opt/test/utils.c +++ b/ccan/opt/test/utils.c @@ -1,4 +1,4 @@ -#define _GNU_SOURCE +#include "config.h" #include #include #include @@ -29,7 +29,7 @@ void show_arg(char buf[OPT_SHOW_LEN], const char *arg) char *err_output = NULL; -static void save_err_output(const char *fmt, ...) +void save_err_output(const char *fmt, ...) { va_list ap; char *p; @@ -49,7 +49,15 @@ static void save_err_output(const char *fmt, ...) err_output = p; } -/* FIXME: This leaks, BTW. */ +void reset_options(void) +{ + opt_free_table(); + free(err_output); + err_output = NULL; +} + +static bool allocated = false; + bool parse_args(int *argc, char ***argv, ...) { char **a; @@ -63,7 +71,12 @@ bool parse_args(int *argc, char ***argv, ...) (*argc)++; a = realloc(a, sizeof(*a) * (*argc + 1)); } + + if (allocated) + free(*argv); + *argv = a; + allocated = true; /* Re-set before parsing. */ optind = 0;