From a7188fd690ee1370fa69dd33320770a24f33c071 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 12 Jun 2018 12:05:51 +0930 Subject: [PATCH] tools/configurator: don't rely on size of tests_array. Groundwork for adding tests dynamically. Signed-off-by: Rusty Russell --- tools/configurator/configurator.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/tools/configurator/configurator.c b/tools/configurator/configurator.c index 43fbf1f6..a6c965fc 100644 --- a/tools/configurator/configurator.c +++ b/tools/configurator/configurator.c @@ -100,7 +100,10 @@ struct test { bool answer; }; -static struct test tests[] = { +/* Terminated by a NULL name */ +static struct test *tests; + +static const struct test base_tests[] = { { "HAVE_32BIT_OFF_T", "off_t is 32 bits", "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, "#include \n" @@ -598,10 +601,11 @@ static struct test *find_test(const char *name) { unsigned int i; - for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) { + for (i = 0; tests[i].name; i++) { if (strcmp(tests[i].name, name) == 0) return &tests[i]; } + c12r_errx(2, "Unknown test %s", name); abort(); } @@ -823,6 +827,11 @@ int main(int argc, const char *argv[]) if (argc == 1) argv = default_args; + /* Copy with NULL entry at end */ + tests = calloc(sizeof(base_tests)/sizeof(base_tests[0]) + 1, + sizeof(base_tests[0])); + memcpy(tests, base_tests, sizeof(base_tests)); + orig_cc = argv[1]; if (configurator_cc) argv[1] = configurator_cc; @@ -833,7 +842,7 @@ int main(int argc, const char *argv[]) sleep(1); end_test(1); } - for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) + for (i = 0; tests[i].name; i++) run_test(cmd, &tests[i]); free(cmd); @@ -851,7 +860,7 @@ int main(int argc, const char *argv[]) if (!vars) c12r_err(2, "Could not open %s", varfile); } - for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++) + for (i = 0; tests[i].name; i++) fprintf(vars, "%s=%u\n", tests[i].name, tests[i].answer); if (vars != stdout) { if (fclose(vars) != 0) @@ -881,7 +890,7 @@ int main(int argc, const char *argv[]) fprintf(outf, "#define CCAN_OUTPUT_EXE_CFLAG \"%s\"\n\n", outflag); /* This one implies "#include