From: Paul Eggert Date: Sun, 30 Dec 2012 06:56:31 +0000 (-0800) Subject: regex: port to hosts where malloc (0) == NULL X-Git-Tag: v0.1~294 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=bbf0d723ed2335add96bcc0f842885d8a5d8b6da;p=gnulib.git regex: port to hosts where malloc (0) == NULL Reported by Aharon Robbins in . * lib/regex_internal.c (re_node_set_alloc): Don't assume that malloc (0) yields nonnull. * lib/regex_internal.h (MALLOC_0_IS_NONNULL): New macro. * m4/regex.m4 (gl_PREREQ_REGEX): Require gl_EEMALLOC. * modules/regex (Files): Add m4/eealloc.m4. --- diff --git a/ChangeLog b/ChangeLog index b3e202a2ad..71ae04df79 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2012-12-29 Paul Eggert + regex: port to hosts where malloc (0) == NULL + Reported by Aharon Robbins in + . + * lib/regex_internal.c (re_node_set_alloc): + Don't assume that malloc (0) yields nonnull. + * lib/regex_internal.h (MALLOC_0_IS_NONNULL): New macro. + * m4/regex.m4 (gl_PREREQ_REGEX): Require gl_EEMALLOC. + * modules/regex (Files): Add m4/eealloc.m4. + regex: port to C89 Reported by Aharon Robbins in . diff --git a/lib/regex_internal.c b/lib/regex_internal.c index 62b029dbfa..cac0190994 100644 --- a/lib/regex_internal.c +++ b/lib/regex_internal.c @@ -974,7 +974,7 @@ re_node_set_alloc (re_node_set *set, Idx size) set->alloc = size; set->nelem = 0; set->elems = re_malloc (Idx, size); - if (BE (set->elems == NULL, 0)) + if (BE (set->elems == NULL, 0) && (MALLOC_0_IS_NONNULL || size != 0)) return REG_ESPACE; return REG_NOERROR; } diff --git a/lib/regex_internal.h b/lib/regex_internal.h index 79c5f20f3c..9c746f5e9f 100644 --- a/lib/regex_internal.h +++ b/lib/regex_internal.h @@ -464,6 +464,12 @@ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, # endif #endif +#ifdef _LIBC +# define MALLOC_0_IS_NONNULL 1 +#elif !defined MALLOC_0_IS_NONNULL +# define MALLOC_0_IS_NONNULL 0 +#endif + #ifndef MAX # define MAX(a,b) ((a) < (b) ? (b) : (a)) #endif diff --git a/m4/regex.m4 b/m4/regex.m4 index 41be5e8d3c..1622027681 100644 --- a/m4/regex.m4 +++ b/m4/regex.m4 @@ -220,6 +220,7 @@ AC_DEFUN([gl_PREREQ_REGEX], AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_REQUIRE([gl_EEMALLOC]) AC_CHECK_HEADERS([libintl.h]) AC_CHECK_FUNCS_ONCE([isblank iswctype wcscoll]) AC_CHECK_DECLS([isblank], [], [], [[#include ]]) diff --git a/modules/regex b/modules/regex index cfc5d07078..279f10a10b 100644 --- a/modules/regex +++ b/modules/regex @@ -8,6 +8,7 @@ lib/regex_internal.c lib/regex_internal.h lib/regexec.c lib/regcomp.c +m4/eealloc.m4 m4/regex.m4 m4/mbstate_t.m4