]>
Commit | Line | Data |
---|---|---|
dc6c21da TT |
1 | # free.m4 serial 6 |
2 | # Copyright (C) 2003-2005, 2009-2022 Free Software Foundation, Inc. | |
9c9d63b1 PM |
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 | |
dc6c21da TT |
43 | *yes) |
44 | AC_DEFINE([HAVE_FREE_POSIX], [1], | |
45 | [Define if the 'free' function is guaranteed to preserve errno.]) | |
46 | ;; | |
9c9d63b1 PM |
47 | *) REPLACE_FREE=1 ;; |
48 | esac | |
49 | ]) | |
50 | ||
51 | # Prerequisites of lib/free.c. | |
52 | AC_DEFUN([gl_PREREQ_FREE], [:]) |