1 | # free.m4 serial 6
|
---|
2 | # Copyright (C) 2003-2005, 2009-2021 Free Software Foundation, Inc.
|
---|
3 | # This file is free software; the Free Software Foundation
|
---|
4 | # gives unlimited permission to copy and/or distribute it,
|
---|
5 | # with or without modifications, as long as this notice is preserved.
|
---|
6 |
|
---|
7 | # Written by Paul Eggert and Bruno Haible.
|
---|
8 |
|
---|
9 | AC_DEFUN([gl_FUNC_FREE],
|
---|
10 | [
|
---|
11 | AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
|
---|
12 |
|
---|
13 | dnl In the next release of POSIX, free must preserve errno.
|
---|
14 | dnl https://www.austingroupbugs.net/view.php?id=385
|
---|
15 | dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924
|
---|
16 | dnl So far, we know of three platforms that do this:
|
---|
17 | dnl * glibc >= 2.33, thanks to the fix for this bug:
|
---|
18 | dnl <https://sourceware.org/bugzilla/show_bug.cgi?id=17924>
|
---|
19 | dnl * OpenBSD >= 4.5, thanks to this commit:
|
---|
20 | dnl <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h>
|
---|
21 | dnl * Solaris, because its malloc() implementation is based on brk(),
|
---|
22 | dnl not mmap(); hence its free() implementation makes no system calls.
|
---|
23 | dnl For other platforms, you can only be sure if they state it in their
|
---|
24 | dnl documentation, or by code inspection of the free() implementation in libc.
|
---|
25 | AC_CACHE_CHECK([whether free is known to preserve errno],
|
---|
26 | [gl_cv_func_free_preserves_errno],
|
---|
27 | [AC_COMPILE_IFELSE(
|
---|
28 | [AC_LANG_PROGRAM(
|
---|
29 | [[#include <stdlib.h>
|
---|
30 | ]],
|
---|
31 | [[#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__)
|
---|
32 | #elif defined __OpenBSD__
|
---|
33 | #elif defined __sun
|
---|
34 | #else
|
---|
35 | #error "'free' is not known to preserve errno"
|
---|
36 | #endif
|
---|
37 | ]])],
|
---|
38 | [gl_cv_func_free_preserves_errno=yes],
|
---|
39 | [gl_cv_func_free_preserves_errno=no])
|
---|
40 | ])
|
---|
41 |
|
---|
42 | case $gl_cv_func_free_preserves_errno in
|
---|
43 | *yes)
|
---|
44 | AC_DEFINE([HAVE_FREE_POSIX], [1],
|
---|
45 | [Define if the 'free' function is guaranteed to preserve errno.])
|
---|
46 | ;;
|
---|
47 | *) REPLACE_FREE=1 ;;
|
---|
48 | esac
|
---|
49 | ])
|
---|
50 |
|
---|
51 | # Prerequisites of lib/free.c.
|
---|
52 | AC_DEFUN([gl_PREREQ_FREE], [:])
|
---|