summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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