Blame m4/malloc.m4

Packit Service 991b93
# malloc.m4 serial 20
Packit Service 991b93
dnl Copyright (C) 2007, 2009-2020 Free Software Foundation, Inc.
Packit aea12f
dnl This file is free software; the Free Software Foundation
Packit aea12f
dnl gives unlimited permission to copy and/or distribute it,
Packit aea12f
dnl with or without modifications, as long as this notice is preserved.
Packit aea12f
Packit aea12f
# This is adapted with modifications from upstream Autoconf here:
Packit aea12f
# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c
Packit aea12f
AC_DEFUN([_AC_FUNC_MALLOC_IF],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([AC_HEADER_STDC])dnl
Packit aea12f
  AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
Packit aea12f
  AC_CHECK_HEADERS([stdlib.h])
Packit aea12f
  AC_CACHE_CHECK([for GNU libc compatible malloc],
Packit aea12f
    [ac_cv_func_malloc_0_nonnull],
Packit aea12f
    [AC_RUN_IFELSE(
Packit aea12f
       [AC_LANG_PROGRAM(
Packit aea12f
          [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
Packit aea12f
            # include <stdlib.h>
Packit aea12f
            #else
Packit aea12f
            char *malloc ();
Packit aea12f
            #endif
Packit aea12f
          ]],
Packit aea12f
          [[char *p = malloc (0);
Packit aea12f
            int result = !p;
Packit aea12f
            free (p);
Packit aea12f
            return result;]])
Packit aea12f
       ],
Packit aea12f
       [ac_cv_func_malloc_0_nonnull=yes],
Packit aea12f
       [ac_cv_func_malloc_0_nonnull=no],
Packit aea12f
       [case "$host_os" in
Packit aea12f
          # Guess yes on platforms where we know the result.
Packit aea12f
          *-gnu* | gnu* | *-musl* | freebsd* | netbsd* | openbsd* \
Packit aea12f
          | hpux* | solaris* | cygwin* | mingw*)
Packit aea12f
            ac_cv_func_malloc_0_nonnull="guessing yes" ;;
Packit Service 991b93
          # If we don't know, obey --enable-cross-guesses.
Packit Service 991b93
          *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
Packit aea12f
        esac
Packit aea12f
       ])
Packit aea12f
    ])
Packit aea12f
  case "$ac_cv_func_malloc_0_nonnull" in
Packit aea12f
    *yes)
Packit aea12f
      $1
Packit aea12f
      ;;
Packit aea12f
    *)
Packit aea12f
      $2
Packit aea12f
      ;;
Packit aea12f
  esac
Packit aea12f
])# _AC_FUNC_MALLOC_IF
Packit aea12f
Packit aea12f
# gl_FUNC_MALLOC_GNU
Packit aea12f
# ------------------
Packit aea12f
# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if
Packit aea12f
# it is not.
Packit aea12f
AC_DEFUN([gl_FUNC_MALLOC_GNU],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
Packit aea12f
  dnl _AC_FUNC_MALLOC_IF is defined in Autoconf.
Packit aea12f
  _AC_FUNC_MALLOC_IF(
Packit aea12f
    [AC_DEFINE([HAVE_MALLOC_GNU], [1],
Packit aea12f
               [Define to 1 if your system has a GNU libc compatible 'malloc'
Packit aea12f
                function, and to 0 otherwise.])],
Packit aea12f
    [AC_DEFINE([HAVE_MALLOC_GNU], [0])
Packit aea12f
     REPLACE_MALLOC=1
Packit aea12f
    ])
Packit aea12f
])
Packit aea12f
Packit aea12f
# gl_FUNC_MALLOC_POSIX
Packit aea12f
# --------------------
Packit aea12f
# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
Packit aea12f
# fails), and replace malloc if it is not.
Packit aea12f
AC_DEFUN([gl_FUNC_MALLOC_POSIX],
Packit aea12f
[
Packit aea12f
  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
Packit aea12f
  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
Packit aea12f
  if test $gl_cv_func_malloc_posix = yes; then
Packit aea12f
    AC_DEFINE([HAVE_MALLOC_POSIX], [1],
Packit aea12f
      [Define if the 'malloc' function is POSIX compliant.])
Packit aea12f
  else
Packit aea12f
    REPLACE_MALLOC=1
Packit aea12f
  fi
Packit aea12f
])
Packit aea12f
Packit aea12f
# Test whether malloc, realloc, calloc are POSIX compliant,
Packit aea12f
# Set gl_cv_func_malloc_posix to yes or no accordingly.
Packit aea12f
AC_DEFUN([gl_CHECK_MALLOC_POSIX],
Packit aea12f
[
Packit aea12f
  AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
Packit aea12f
    [gl_cv_func_malloc_posix],
Packit aea12f
    [
Packit aea12f
      dnl It is too dangerous to try to allocate a large amount of memory:
Packit aea12f
      dnl some systems go to their knees when you do that. So assume that
Packit aea12f
      dnl all Unix implementations of the function are POSIX compliant.
Packit aea12f
      AC_COMPILE_IFELSE(
Packit aea12f
        [AC_LANG_PROGRAM(
Packit aea12f
           [[]],
Packit aea12f
           [[#if defined _WIN32 && ! defined __CYGWIN__
Packit aea12f
             choke me
Packit aea12f
             #endif
Packit aea12f
            ]])],
Packit aea12f
        [gl_cv_func_malloc_posix=yes],
Packit aea12f
        [gl_cv_func_malloc_posix=no])
Packit aea12f
    ])
Packit aea12f
])