diff options
Diffstat (limited to 'lib/free.c')
-rw-r--r-- | lib/free.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/free.c b/lib/free.c index 35872c848..b22124154 100644 --- a/lib/free.c +++ b/lib/free.c @@ -19,15 +19,19 @@ #include <config.h> +/* Specification. */ #include <stdlib.h> -#include <errno.h> +/* A function definition is only needed if HAVE_FREE_POSIX is not defined. */ +#if !HAVE_FREE_POSIX + +# include <errno.h> void rpl_free (void *p) -#undef free +# undef free { -#if defined __GNUC__ && !defined __clang__ +# if defined __GNUC__ && !defined __clang__ /* An invalid GCC optimization <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396> would optimize away the assignments in the code below, when link-time @@ -39,9 +43,11 @@ rpl_free (void *p) errno = 0; free (p); errno = err[errno == 0]; -#else +# else int err = errno; free (p); errno = err; -#endif +# endif } + +#endif |