X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/d546887cd6d807f258fc4fb2f47a655310e356ba..481f693b0400b05586d90f60494e0e661ad8a1c1:/t/testlib.c diff --git a/t/testlib.c b/t/testlib.c index 41ea1fc..5902e7b 100644 --- a/t/testlib.c +++ b/t/testlib.c @@ -1,6 +1,6 @@ /* * Miscellaneous functions used by the cdecl99 test suite. - * Copyright © 2011-2012, 2021-2023 Nick Bowler + * Copyright © 2011-2012, 2021-2024 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,14 +20,31 @@ #include #include #include +#include #include #include -#include + +#include "cdecl.h" #include "help.h" #include "test.h" +#include "getline.h" #include "intconv.h" +void print_error(const char *fmt, ...) +{ + extern const char *progname; + va_list ap; + + fprintf(stderr, "%s: ", progname); + + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + + fprintf(stderr, "\n"); +} + void *realloc_nofail(void *ptr, size_t size) { void *p; @@ -60,11 +77,11 @@ static unsigned intconv_base(const char **str) return INTCONV_DECIMAL; } -bool test_strtoumax(uintmax_t *out, const char *s, uintmax_t limit) +bool test_strtoumax(cdecl_uintmax *out, const char *s, cdecl_uintmax limit) { static const char idx[] = "0123456789abcdef0123456789ABCDEF"; unsigned base = intconv_base(&s); - uintmax_t v; + cdecl_uintmax v; char *c, d; for (v = 0; (d = *s++);) { @@ -89,3 +106,18 @@ void test_print_options(const struct option *lopts) putchar('\n'); } } + +int test_getline(char **linebuf, size_t *n) +{ + int rc; + + if ((rc = dx_getline(linebuf, n, stdin)) < 0) { + if (rc == DX_GETLINE_ENOMEM) + print_error("%s", _("failed to allocate memory")); + else + print_error("%s", strerror(errno)); + abort(); + } + + return rc; +}