Commit ec822c65 authored by Rusty Russell's avatar Rusty Russell

opt: don't leak on exit (valgrind complains).

Recent real usage case showed this leak when we call opt_usage_and_exit:
we don't bother freeing before exit.  With valgrind, it matters.
parent e59b7388
......@@ -123,12 +123,18 @@ char *opt_inc_intval(int *i)
char *opt_version_and_exit(const char *version)
{
printf("%s\n", version);
/* Don't have valgrind complain! */
opt_free_table();
exit(0);
}
char *opt_usage_and_exit(const char *extra)
{
printf("%s", opt_usage(opt_argv0, extra));
char *usage = opt_usage(opt_argv0, extra);
printf("%s", usage);
/* Don't have valgrind complain! */
free(usage);
opt_free_table();
exit(0);
}
......
......@@ -19,9 +19,6 @@ static int saved_fprintf(FILE *ignored, const char *fmt, ...);
#define vfprintf(f, fmt, ap) saved_vprintf(fmt, ap)
static int saved_vprintf(const char *fmt, va_list ap);
#define malloc(size) saved_malloc(size)
static void *saved_malloc(size_t size);
#include <ccan/opt/helpers.c>
#include <ccan/opt/opt.c>
#include <ccan/opt/usage.c>
......@@ -65,13 +62,6 @@ static int saved_fprintf(FILE *ignored, const char *fmt, ...)
return ret;
}
#undef malloc
static void *last_allocation;
static void *saved_malloc(size_t size)
{
return last_allocation = malloc(size);
}
static void set_args(int *argc, char ***argv, ...)
{
va_list ap;
......@@ -87,7 +77,7 @@ static void set_args(int *argc, char ***argv, ...)
/* Test helpers. */
int main(int argc, char *argv[])
{
plan_tests(452);
plan_tests(454);
/* opt_set_bool */
{
......@@ -1005,6 +995,8 @@ int main(int argc, char *argv[])
fail("opt_show_version_and_exit returned?");
} else {
ok1(exitval - 1 == 0);
/* We should have freed table!. */
ok1(opt_table == NULL);
}
ok1(strcmp(output, "1.2.3\n") == 0);
free(output);
......@@ -1027,14 +1019,14 @@ int main(int argc, char *argv[])
fail("opt_usage_and_exit returned?");
} else {
ok1(exitval - 1 == 0);
/* We should have freed table!. */
ok1(opt_table == NULL);
}
ok1(strstr(output, "[args]"));
ok1(strstr(output, argv[0]));
ok1(strstr(output, "[-a]"));
free(output);
free(argv);
/* It exits without freeing usage string. */
free(last_allocation);
output = NULL;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment