summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Klausner <wiz@NetBSD.org>2017-05-19 10:22:44 +0200
committerWill Estes <westes575@gmail.com>2017-05-19 07:29:15 -0400
commit2b290d8ebdfa73b8f4665847fb689884eceee269 (patch)
tree89c70c5d43d8c609baea84ae0f41db4685e6efb7
parent3a70bac04ac4743d64c23d5f5a3df55494bf6050 (diff)
scanner: Use reallocarr() when available.
NetBSD had a crash during build. Since the provided substitute for reallocarray() wasn't working, use NetBSD's reallocarr(). Let configure choose that function whenever it is available. Use reallocarray if available. Still fallback if neither is available. Fixes #219
-rw-r--r--configure.ac1
-rw-r--r--src/misc.c16
2 files changed, 15 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 55e774b..d0f3b7d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -166,6 +166,7 @@ strtol dnl
AC_CHECK_FUNCS([dnl
pow dnl Used only by "examples/manual/expr"
setlocale dnl Needed only if NLS is enabled
+reallocarr dnl NetBSD function. Use reallocarray if not available.
reallocarray dnl OpenBSD function. We have replacement if not available.
])
diff --git a/src/misc.c b/src/misc.c
index ef27833..39483ea 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -142,7 +142,14 @@ void add_action (const char *new_text)
void *allocate_array (int size, size_t element_size)
{
void *mem;
-#if HAVE_REALLOCARRAY
+#if HAVE_REALLOCARR
+ mem = NULL;
+ if (reallocarr(&mem, (size_t) size, element_size))
+ flexfatal (_
+ ("memory allocation failed in allocate_array()"));
+
+ return mem;
+#elif HAVE_REALLOCARRAY
/* reallocarray has built-in overflow detection */
mem = reallocarray(NULL, (size_t) size, element_size);
#else
@@ -659,7 +666,12 @@ char *readable_form (int c)
void *reallocate_array (void *array, int size, size_t element_size)
{
void *new_array;
-#if HAVE_REALLOCARRAY
+#if HAVE_REALLOCARR
+ if (reallocarr(&array, (size_t) size, element_size))
+ flexfatal (_("attempt to increase array size failed"));
+
+ return array;
+#elif HAVE_REALLOCARRAY
/* reallocarray has built-in overflow detection */
new_array = reallocarray(array, (size_t) size, element_size);
#else