X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/e031b4f0220432aef6e1864ea6359353dbd8aed3..1c892ba2a411da86a1d419bbc07f841fedb2aef9:/test/testlib.c diff --git a/test/testlib.c b/test/testlib.c index 3c8bb8c..9318663 100644 --- a/test/testlib.c +++ b/test/testlib.c @@ -1,6 +1,6 @@ /* * Miscellaneous functions used by the cdecl99 test suite. - * Copyright © 2011 Nick Bowler + * Copyright © 2011-2012, 2021 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,9 +20,15 @@ #include #include #include +#include #include + +#include "help.h" #include "test.h" +static size_t printbuf_size; +static char *printbuf; + void *realloc_nofail(void *ptr, size_t size) { void *p; @@ -43,19 +49,32 @@ void *malloc_nofail(size_t size) void test_print_decl(struct cdecl *decl) { - static size_t bufsz; - static char *buf; size_t rc; retry: - rc = cdecl_declare(buf, bufsz, decl); - if (rc >= bufsz) { - bufsz = rc + 1; - buf = realloc_nofail(buf, bufsz); + rc = cdecl_declare(printbuf, printbuf_size, decl); + if (rc >= printbuf_size) { + printbuf_size = rc + 1; + printbuf = realloc_nofail(printbuf, printbuf_size); + goto retry; + } + + printf("%s\n", printbuf); +} + +void test_explain_decl(struct cdecl *decl) +{ + size_t rc; + +retry: + rc = cdecl_explain(printbuf, printbuf_size, decl); + if (rc >= printbuf_size) { + printbuf_size = rc + 1; + printbuf = realloc_nofail(printbuf, printbuf_size); goto retry; } - printf("%s\n", buf); + printf("%s\n", printbuf); } bool strict_strtoul(unsigned long *val, const char *str, int base) @@ -73,8 +92,19 @@ bool strict_strtoul(unsigned long *val, const char *str, int base) void test_print_version(const char *program) { printf("%s (%s) %s\n", program, PACKAGE_NAME, PACKAGE_VERSION); - puts("Copyright (C) 2011 Nick Bowler."); + puts("Copyright (C) 2021 Nick Bowler."); puts("License GPLv3+: GNU GPL version 3 or later ."); puts("This is free software: you are free to change and redistribute it."); puts("There is NO WARRANTY, to the extent permitted by law."); } + +void test_print_options(const struct option *lopts) +{ + const struct option *opt; + + puts("Options:"); + for (opt = lopts; opt->val; opt++) { + if (help_print_optstring(opt, "ARG", 20)) + putchar('\n'); + } +}