changeset 14538:cd02b552d886

stdlib: let modules use system malloc, realloc * lib/stdlib.in.h (malloc, realloc): Don't #define or add warnings if !_GL_USE_STDLIB_ALLOC.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 08 Apr 2011 11:06:03 -0700
parents 10946c7debf8
children 148e9e02c46b
files ChangeLog lib/stdlib.in.h
diffstat 2 files changed, 32 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2011-04-08  Paul Eggert  <eggert@cs.ucla.edu>
 
+	stdlib: let modules use system malloc, realloc
+	* lib/stdlib.in.h (malloc, realloc): Don't #define or add warnings
+	if !_GL_USE_STDLIB_ALLOC.
+
 	careadlinkat: rename members to avoid problem
 	* lib/allocator.h (struct allocator): Rename members from
 	malloc/realloc to allocate/reallocate, to avoid problems if malloc
--- a/lib/stdlib.in.h
+++ b/lib/stdlib.in.h
@@ -255,23 +255,29 @@
 # endif
 #endif
 
-#if @GNULIB_MALLOC_POSIX@
-# if @REPLACE_MALLOC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef malloc
-#   define malloc rpl_malloc
-#  endif
+/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not
+   rely on GNU or POSIX semantics for malloc and realloc (for example,
+   by never specifying a zero size), so it does not need malloc or
+   realloc to be redefined.  */
+#if !_GL_USE_STDLIB_ALLOC
+# if @GNULIB_MALLOC_POSIX@
+#  if @REPLACE_MALLOC@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef malloc
+#    define malloc rpl_malloc
+#   endif
 _GL_FUNCDECL_RPL (malloc, void *, (size_t size));
 _GL_CXXALIAS_RPL (malloc, void *, (size_t size));
-# else
+#  else
 _GL_CXXALIAS_SYS (malloc, void *, (size_t size));
-# endif
+#  endif
 _GL_CXXALIASWARN (malloc);
-#elif defined GNULIB_POSIXCHECK
-# undef malloc
+# elif defined GNULIB_POSIXCHECK
+#  undef malloc
 /* Assume malloc is always declared.  */
 _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
                  "use gnulib module malloc-posix for portability");
+# endif
 #endif
 
 /* Convert a multibyte character to a wide character.  */
@@ -529,23 +535,25 @@
 #endif
 
 
-#if @GNULIB_REALLOC_POSIX@
-# if @REPLACE_REALLOC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef realloc
-#   define realloc rpl_realloc
-#  endif
+#if !_GL_USE_STDLIB_ALLOC
+# if @GNULIB_REALLOC_POSIX@
+#  if @REPLACE_REALLOC@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef realloc
+#    define realloc rpl_realloc
+#   endif
 _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size));
 _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
-# else
+#  else
 _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
-# endif
+#  endif
 _GL_CXXALIASWARN (realloc);
-#elif defined GNULIB_POSIXCHECK
-# undef realloc
+# elif defined GNULIB_POSIXCHECK
+#  undef realloc
 /* Assume realloc is always declared.  */
 _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
                  "use gnulib module realloc-posix for portability");
+# endif
 #endif
 
 #if @GNULIB_REALPATH@