1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # free.m4 serial 6
- # Copyright (C) 2003-2005, 2009-2023 Free Software Foundation, Inc.
- # This file is free software; the Free Software Foundation
- # gives unlimited permission to copy and/or distribute it,
- # with or without modifications, as long as this notice is preserved.
- # Written by Paul Eggert and Bruno Haible.
- AC_DEFUN([gl_FUNC_FREE],
- [
- AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
- dnl In the next release of POSIX, free must preserve errno.
- dnl https://www.austingroupbugs.net/view.php?id=385
- dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924
- dnl So far, we know of three platforms that do this:
- dnl * glibc >= 2.33, thanks to the fix for this bug:
- dnl <https://sourceware.org/bugzilla/show_bug.cgi?id=17924>
- dnl * OpenBSD >= 4.5, thanks to this commit:
- dnl <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h>
- dnl * Solaris, because its malloc() implementation is based on brk(),
- dnl not mmap(); hence its free() implementation makes no system calls.
- dnl For other platforms, you can only be sure if they state it in their
- dnl documentation, or by code inspection of the free() implementation in libc.
- AC_CACHE_CHECK([whether free is known to preserve errno],
- [gl_cv_func_free_preserves_errno],
- [AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM(
- [[#include <stdlib.h>
- ]],
- [[#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__)
- #elif defined __OpenBSD__
- #elif defined __sun
- #else
- #error "'free' is not known to preserve errno"
- #endif
- ]])],
- [gl_cv_func_free_preserves_errno=yes],
- [gl_cv_func_free_preserves_errno=no])
- ])
- case $gl_cv_func_free_preserves_errno in
- *yes)
- AC_DEFINE([HAVE_FREE_POSIX], [1],
- [Define if the 'free' function is guaranteed to preserve errno.])
- ;;
- *) REPLACE_FREE=1 ;;
- esac
- ])
- # Prerequisites of lib/free.c.
- AC_DEFUN([gl_PREREQ_FREE], [:])
|