changeset 13433:7f9b23c2c458

Use modern idiom for malloc() replacement.
author Bruno Haible <bruno@clisp.org>
date Mon, 21 Jun 2010 23:58:08 +0200
parents 7c47558d5b02
children 3075f4843802
files ChangeLog m4/malloc.m4 modules/malloc
diffstat 3 files changed, 39 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2010-06-21  Bruno Haible  <bruno@clisp.org>
+
+	Use modern idiom for malloc() replacement.
+	* modules/malloc (configure.ac): Invoke gl_FUNC_MALLOC_GNU instead of
+	AC_FUNC_MALLOC.
+	* m4/malloc.m4 (gl_FUNC_MALLOC_GNU): New macro, mostly copied from
+	Autoconf's AC_FUNC_MALLOC.
+	(gl_FUNC_MALLOC_POSIX): Rely on gl_STDLIB_H_DEFAULTS to initialize
+	HAVE_MALLOC_POSIX. Invoke gl_REPLACE_MALLOC.
+	(gl_REPLACE_MALLOC): New macro.
+	Reported by Richard Lloyd <richard.lloyd@connectinternetsolutions.com>.
+
 2010-06-20  Richard Lloyd  <richard.lloyd@connectinternetsolutions.com>
 
 	stdio.in.h: fix compilation failure when using HP-UX 11's C compiler
--- a/m4/malloc.m4
+++ b/m4/malloc.m4
@@ -1,25 +1,40 @@
-# malloc.m4 serial 9
+# malloc.m4 serial 10
 dnl Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
+# gl_FUNC_MALLOC_GNU
+# ------------------
+# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
+# it is not.
+AC_DEFUN([gl_FUNC_MALLOC_GNU],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  dnl _AC_FUNC_MALLOC_IF is defined in Autoconf.
+  _AC_FUNC_MALLOC_IF(
+    [AC_DEFINE([HAVE_MALLOC], [1],
+               [Define to 1 if your system has a GNU libc compatible 'malloc'
+                function, and to 0 otherwise.])],
+    [AC_DEFINE([HAVE_MALLOC], [0])
+     gl_REPLACE_MALLOC
+    ])
+])
+
 # gl_FUNC_MALLOC_POSIX
 # --------------------
 # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
 # fails), and replace malloc if it is not.
 AC_DEFUN([gl_FUNC_MALLOC_POSIX],
 [
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
   if test $gl_cv_func_malloc_posix = yes; then
-    HAVE_MALLOC_POSIX=1
     AC_DEFINE([HAVE_MALLOC_POSIX], [1],
       [Define if the 'malloc' function is POSIX compliant.])
   else
-    AC_LIBOBJ([malloc])
-    HAVE_MALLOC_POSIX=0
+    gl_REPLACE_MALLOC
   fi
-  AC_SUBST([HAVE_MALLOC_POSIX])
 ])
 
 # Test whether malloc, realloc, calloc are POSIX compliant,
@@ -39,3 +54,9 @@
         ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no])
     ])
 ])
+
+AC_DEFUN([gl_REPLACE_MALLOC],
+[
+  AC_LIBOBJ([malloc])
+  HAVE_MALLOC_POSIX=0
+])
--- a/modules/malloc
+++ b/modules/malloc
@@ -13,7 +13,7 @@
 malloc-posix
 
 configure.ac:
-AC_FUNC_MALLOC
+gl_FUNC_MALLOC_GNU
 AC_DEFINE([GNULIB_MALLOC_GNU], 1, [Define to indicate the 'malloc' module.])
 
 Makefile.am: