1# malloc.m4 serial 13
2dnl Copyright (C) 2007, 2009-2011 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6
7# gl_FUNC_MALLOC_GNU
8# ------------------
9# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
10# it is not.
11AC_DEFUN([gl_FUNC_MALLOC_GNU],
12[
13  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
14  dnl _AC_FUNC_MALLOC_IF is defined in Autoconf.
15  _AC_FUNC_MALLOC_IF(
16    [AC_DEFINE([HAVE_MALLOC_GNU], [1],
17               [Define to 1 if your system has a GNU libc compatible 'malloc'
18                function, and to 0 otherwise.])],
19    [AC_DEFINE([HAVE_MALLOC_GNU], [0])
20     REPLACE_MALLOC=1
21    ])
22])
23
24# gl_FUNC_MALLOC_POSIX
25# --------------------
26# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
27# fails), and replace malloc if it is not.
28AC_DEFUN([gl_FUNC_MALLOC_POSIX],
29[
30  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
31  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
32  if test $gl_cv_func_malloc_posix = yes; then
33    AC_DEFINE([HAVE_MALLOC_POSIX], [1],
34      [Define if the 'malloc' function is POSIX compliant.])
35  else
36    REPLACE_MALLOC=1
37  fi
38])
39
40# Test whether malloc, realloc, calloc are POSIX compliant,
41# Set gl_cv_func_malloc_posix to yes or no accordingly.
42AC_DEFUN([gl_CHECK_MALLOC_POSIX],
43[
44  AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
45    [gl_cv_func_malloc_posix],
46    [
47      dnl It is too dangerous to try to allocate a large amount of memory:
48      dnl some systems go to their knees when you do that. So assume that
49      dnl all Unix implementations of the function are POSIX compliant.
50      AC_COMPILE_IFELSE(
51        [AC_LANG_PROGRAM(
52           [[]],
53           [[#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
54             choke me
55             #endif
56            ]])],
57        [gl_cv_func_malloc_posix=yes],
58        [gl_cv_func_malloc_posix=no])
59    ])
60])
61