/*
* 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <stdarg.h>
#include <errno.h>
#include <getopt.h>
-#include <cdecl.h>
+
+#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;
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++);) {
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;
+}