| From 1f8a3f7bccfc84b195218ad0086ebd57049c3490 Mon Sep 17 00:00:00 2001 |
| From: Guillem Jover <guillem@hadrons.org> |
| Date: Tue, 6 Mar 2018 01:39:45 +0100 |
| Subject: [PATCH] Fix function declaration protection for glibc already |
| providing them |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| On non-glibc based systems we cannot unconditionally use the |
| __GLIBC_PREREQ macro as it gets expanded before evaluation. Instead, |
| if it is undefined, define it to 0. |
| |
| We should also always declare these functions on non-glibc based |
| systems. And on systems with a new enough glibc, which provides these |
| functions, we should still provide the declarations if _GNU_SOURCE |
| is *not* defined. |
| |
| Backported from: |
| https://cgit.freedesktop.org/libbsd/patch/?id=1f8a3f7bccfc84b195218ad0086ebd57049c3490 |
| |
| Reported-by: Jörg Krause <joerg.krause@embedded.rocks> |
| Signed-off-by: Guillem Jover <guillem@hadrons.org> |
| Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks> |
| --- |
| include/bsd/stdlib.h | 3 ++- |
| include/bsd/string.h | 3 ++- |
| include/bsd/sys/cdefs.h | 8 ++++++++ |
| 3 files changed, 12 insertions(+), 2 deletions(-) |
| |
| diff --git a/include/bsd/stdlib.h b/include/bsd/stdlib.h |
| index 8d33d1f..a5b063c 100644 |
| --- a/include/bsd/stdlib.h |
| +++ b/include/bsd/stdlib.h |
| @@ -71,7 +71,8 @@ int sradixsort(const unsigned char **base, int nmemb, |
| const unsigned char *table, unsigned endbyte); |
| |
| void *reallocf(void *ptr, size_t size); |
| -#if defined(_GNU_SOURCE) && defined(__GLIBC__) && !__GLIBC_PREREQ(2, 26) |
| +#if !defined(__GLIBC__) || \ |
| + (defined(__GLIBC__) && (!__GLIBC_PREREQ(2, 26) || !defined(_GNU_SOURCE))) |
| void *reallocarray(void *ptr, size_t nmemb, size_t size); |
| #endif |
| |
| diff --git a/include/bsd/string.h b/include/bsd/string.h |
| index 29097f6..f987fee 100644 |
| --- a/include/bsd/string.h |
| +++ b/include/bsd/string.h |
| @@ -46,7 +46,8 @@ size_t strlcat(char *dst, const char *src, size_t siz); |
| char *strnstr(const char *str, const char *find, size_t str_len); |
| void strmode(mode_t mode, char *str); |
| |
| -#if defined(_GNU_SOURCE) && defined(__GLIBC__) && !__GLIBC_PREREQ(2, 25) |
| +#if !defined(__GLIBC__) || \ |
| + (defined(__GLIBC__) && (!__GLIBC_PREREQ(2, 25) || !defined(_GNU_SOURCE))) |
| void explicit_bzero(void *buf, size_t len); |
| #endif |
| __END_DECLS |
| diff --git a/include/bsd/sys/cdefs.h b/include/bsd/sys/cdefs.h |
| index b4c8f30..d1cc419 100644 |
| --- a/include/bsd/sys/cdefs.h |
| +++ b/include/bsd/sys/cdefs.h |
| @@ -58,6 +58,14 @@ |
| #endif |
| #endif |
| |
| +/* |
| + * On non-glibc based systems, we cannot unconditionally use the |
| + * __GLIBC_PREREQ macro as it gets expanded before evaluation. |
| + */ |
| +#ifndef __GLIBC_PREREQ |
| +#define __GLIBC_PREREQ(maj, min) 0 |
| +#endif |
| + |
| /* |
| * Some kFreeBSD headers expect those macros to be set for sanity checks. |
| */ |
| -- |
| 2.16.2 |
| |