diff options
author | Matthew Bauer <mjbauer95@gmail.com> | 2018-10-13 18:14:56 -0500 |
---|---|---|
committer | Matthew Bauer <mjbauer95@gmail.com> | 2018-10-13 18:14:56 -0500 |
commit | 7c61bb615a3bcda46534436fd3136ef6103f3505 (patch) | |
tree | 0573c9de6a7d97c23b7ad80b3f84550694621f30 /pkgs/development/libraries/libbsd | |
parent | a29f2f20cd2deabccd3d0352504f828c8b7805a3 (diff) |
libbsd: update patches
Diffstat (limited to 'pkgs/development/libraries/libbsd')
-rw-r--r-- | pkgs/development/libraries/libbsd/cdefs.patch | 222 | ||||
-rw-r--r-- | pkgs/development/libraries/libbsd/darwin.patch | 752 | ||||
-rw-r--r-- | pkgs/development/libraries/libbsd/default.nix | 11 | ||||
-rw-r--r-- | pkgs/development/libraries/libbsd/features.patch | 26 | ||||
-rw-r--r-- | pkgs/development/libraries/libbsd/non-glibc.patch | 74 |
5 files changed, 206 insertions, 879 deletions
diff --git a/pkgs/development/libraries/libbsd/cdefs.patch b/pkgs/development/libraries/libbsd/cdefs.patch deleted file mode 100644 index 81822654aeb43..0000000000000 --- a/pkgs/development/libraries/libbsd/cdefs.patch +++ /dev/null @@ -1,222 +0,0 @@ -From 11ec8f1e5dfa1c10e0c9fb94879b6f5b96ba52dd Mon Sep 17 00:00:00 2001 -From: Guillem Jover <guillem@hadrons.org> -Date: Tue, 6 Mar 2018 01:41:35 +0100 -Subject: Handle systems missing <sys/cdefs.h> - -This is a non-portable header, and we cannot expect it to be provided by -the system libc (e.g. musl). We just need and rely on declaration that -we have defined ourselves in our own <bsd/sys/cdefs.h>. So we switch to -only ever assume that. - -Fixes: https://bugs.freedesktop.org/105281 ---- - include/bsd/libutil.h | 4 ++++ - include/bsd/md5.h | 4 ++++ - include/bsd/nlist.h | 4 ++++ - include/bsd/readpassphrase.h | 4 ++++ - include/bsd/stdlib.h | 4 ++++ - include/bsd/string.h | 4 ++++ - include/bsd/stringlist.h | 5 +++++ - include/bsd/sys/queue.h | 4 ++++ - include/bsd/sys/tree.h | 4 ++++ - include/bsd/timeconv.h | 4 ++++ - include/bsd/vis.h | 4 ++++ - include/bsd/wchar.h | 4 ++++ - 12 files changed, 49 insertions(+) - -diff --git a/include/bsd/libutil.h b/include/bsd/libutil.h -index 45b3b15..ccca29a 100644 ---- a/include/bsd/libutil.h -+++ b/include/bsd/libutil.h -@@ -40,7 +40,11 @@ - #define LIBBSD_LIBUTIL_H - - #include <features.h> -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <sys/types.h> - #include <stdint.h> - #include <stdio.h> -diff --git a/include/bsd/md5.h b/include/bsd/md5.h -index 5f3ae46..bf36a30 100644 ---- a/include/bsd/md5.h -+++ b/include/bsd/md5.h -@@ -27,7 +27,11 @@ typedef struct MD5Context { - uint8_t buffer[MD5_BLOCK_LENGTH]; /* input buffer */ - } MD5_CTX; - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <sys/types.h> - - __BEGIN_DECLS -diff --git a/include/bsd/nlist.h b/include/bsd/nlist.h -index cb297e8..8767117 100644 ---- a/include/bsd/nlist.h -+++ b/include/bsd/nlist.h -@@ -27,7 +27,11 @@ - #ifndef LIBBSD_NLIST_H - #define LIBBSD_NLIST_H - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - - struct nlist { - union { -diff --git a/include/bsd/readpassphrase.h b/include/bsd/readpassphrase.h -index 14744b8..5eb8021 100644 ---- a/include/bsd/readpassphrase.h -+++ b/include/bsd/readpassphrase.h -@@ -31,7 +31,11 @@ - #define RPP_SEVENBIT 0x10 /* Strip the high bit from input. */ - #define RPP_STDIN 0x20 /* Read from stdin, not /dev/tty */ - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <sys/types.h> - - __BEGIN_DECLS -diff --git a/include/bsd/stdlib.h b/include/bsd/stdlib.h -index ebc9638..8d33d1f 100644 ---- a/include/bsd/stdlib.h -+++ b/include/bsd/stdlib.h -@@ -42,7 +42,11 @@ - #ifndef LIBBSD_STDLIB_H - #define LIBBSD_STDLIB_H - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <sys/stat.h> - #include <stdint.h> - -diff --git a/include/bsd/string.h b/include/bsd/string.h -index 6798bf6..29097f6 100644 ---- a/include/bsd/string.h -+++ b/include/bsd/string.h -@@ -33,7 +33,11 @@ - #ifndef LIBBSD_STRING_H - #define LIBBSD_STRING_H - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <sys/types.h> - - __BEGIN_DECLS -diff --git a/include/bsd/stringlist.h b/include/bsd/stringlist.h -index ff30cac..dd71496 100644 ---- a/include/bsd/stringlist.h -+++ b/include/bsd/stringlist.h -@@ -31,7 +31,12 @@ - - #ifndef LIBBSD_STRINGLIST_H - #define LIBBSD_STRINGLIST_H -+ -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <sys/types.h> - - /* -diff --git a/include/bsd/sys/queue.h b/include/bsd/sys/queue.h -index 4a94ea7..ac00026 100644 ---- a/include/bsd/sys/queue.h -+++ b/include/bsd/sys/queue.h -@@ -33,7 +33,11 @@ - #ifndef LIBBSD_SYS_QUEUE_H - #define LIBBSD_SYS_QUEUE_H - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - - /* - * This file defines four types of data structures: singly-linked lists, -diff --git a/include/bsd/sys/tree.h b/include/bsd/sys/tree.h -index 628bec0..325b382 100644 ---- a/include/bsd/sys/tree.h -+++ b/include/bsd/sys/tree.h -@@ -30,7 +30,11 @@ - #ifndef LIBBSD_SYS_TREE_H - #define LIBBSD_SYS_TREE_H - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - - /* - * This file defines data structures for different types of trees: -diff --git a/include/bsd/timeconv.h b/include/bsd/timeconv.h -index e2a2c55..a426bd3 100644 ---- a/include/bsd/timeconv.h -+++ b/include/bsd/timeconv.h -@@ -41,7 +41,11 @@ - #ifndef LIBBSD_TIMECONV_H - #define LIBBSD_TIMECONV_H - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <stdint.h> - #include <time.h> - -diff --git a/include/bsd/vis.h b/include/bsd/vis.h -index 970dfdd..ab5430c 100644 ---- a/include/bsd/vis.h -+++ b/include/bsd/vis.h -@@ -72,7 +72,11 @@ - */ - #define UNVIS_END 1 /* no more characters */ - -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - - __BEGIN_DECLS - char *vis(char *, int, int, int); -diff --git a/include/bsd/wchar.h b/include/bsd/wchar.h -index 33a500e..7216503 100644 ---- a/include/bsd/wchar.h -+++ b/include/bsd/wchar.h -@@ -40,7 +40,11 @@ - #define LIBBSD_WCHAR_H - - #include <stddef.h> -+#ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> -+#else -+#include <bsd/sys/cdefs.h> -+#endif - #include <sys/types.h> - - __BEGIN_DECLS --- -cgit v1.1 - diff --git a/pkgs/development/libraries/libbsd/darwin.patch b/pkgs/development/libraries/libbsd/darwin.patch index 4bddec6b0ffd9..0f9cc9aaf964a 100644 --- a/pkgs/development/libraries/libbsd/darwin.patch +++ b/pkgs/development/libraries/libbsd/darwin.patch @@ -1,497 +1,103 @@ diff --git a/configure.ac b/configure.ac -index 88ccd91..0857782 100644 +index 55fcfe6..1e26c93 100644 --- a/configure.ac +++ b/configure.ac -@@ -59,7 +59,7 @@ AS_CASE([$host_os], - ) +@@ -51,15 +51,19 @@ AS_CASE([$host_os], + AC_SEARCH_LIBS([clock_gettime], [rt], [CLOCK_GETTIME_LIBS="-lrt"]) + AC_SUBST([CLOCK_GETTIME_LIBS]) + LIBS="$saved_LIBS" ++ AM_CONDITIONAL([BUILD_LINK_VERSION_SCRIPT], [1]) + ], + [*-musl*], [ + # Upstream refuses to define this, we will do it ourselves then. + AC_DEFINE([__MUSL__], [1], [Define to 1 if we are building for musl]) ++ AM_CONDITIONAL([BUILD_LINK_VERSION_SCRIPT], [1]) + ], +-) ++ [ ++ AM_CONDITIONAL([BUILD_LINK_VERSION_SCRIPT], [1]) ++ ]) # Checks for header files. -AC_CHECK_HEADERS([sys/ndir.h sys/dir.h ndir.h dirent.h]) -+AC_CHECK_HEADERS([sys/ndir.h sys/dir.h ndir.h dirent.h stdio_ext.h]) ++AC_CHECK_HEADERS([sys/ndir.h sys/dir.h ndir.h dirent.h nlist.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_INLINE -@@ -146,6 +146,31 @@ AC_CHECK_FUNCS([clearenv dirfd fopencookie __fpurge \ - pstat_getproc sysconf]) +@@ -143,7 +147,8 @@ AC_LINK_IFELSE( + + AC_CHECK_FUNCS([clearenv dirfd fopencookie __fpurge \ + getauxval getentropy getexecname getline \ +- pstat_getproc sysconf]) ++ pstat_getproc sysconf \ ++ strlcpy strlcat strnstr strmode fpurge]) AM_CONDITIONAL([HAVE_GETENTROPY], [test "x$ac_cv_func_getentropy" = "xtrue"]) -+HostOS=`echo "$host" | sed 's/.*-//'` -+os_is_macosx=false -+nonLinuxOS=false -+AC_SUBST(HostOS) -+case ${HostOS} in -+ darwin* | powerpc*-*-darwin* | freebsd* | netbsd* | openbsd*) -+ os_is_macosx=true -+ nonLinuxOS=true -+ echo HostOS="$HostOS" -+ ;; -+ *) -+ echo host="$host" -+ echo HostOS="$HostOS" -+ os_is_macosx=false -+ nonLinuxOS=false -+ ;; -+esac -+AM_CONDITIONAL([IS_DARWIN], [test x$os_is_macosx = xtrue]) -+AM_COND_IF([IS_DARWIN], -+ [AC_DEFINE([IS_DARWIN], [1], [Get HostOS Type is Darwin])]) -+ -+AM_CONDITIONAL([NON_LINUX], [test x$userdefine_gethostbyname_r = xtrue]) -+AM_COND_IF([NON_LINUX], -+ [AC_DEFINE([NON_LINUX], [1], [Get HostOS Type])]) -+ AC_CONFIG_FILES([ - Makefile - include/Makefile -diff --git a/include/bsd/libutil.h b/include/bsd/libutil.h -index 45b3b15..d0d4043 100644 ---- a/include/bsd/libutil.h -+++ b/include/bsd/libutil.h -@@ -39,7 +39,9 @@ - #ifndef LIBBSD_LIBUTIL_H - #define LIBBSD_LIBUTIL_H - -+#ifdef HAVE_FEATURES_H - #include <features.h> -+#endif - #include <sys/cdefs.h> - #include <sys/types.h> - #include <stdint.h> -diff --git a/include/bsd/stdio.h b/include/bsd/stdio.h -index 4b69983..c75151b 100644 ---- a/include/bsd/stdio.h -+++ b/include/bsd/stdio.h -@@ -48,12 +48,16 @@ - __BEGIN_DECLS - const char *fmtcheck(const char *, const char *); - -+#if !defined(darwin) && !defined(__APPLE__) && !defined(MACOSX) - /* XXX: The function requires cooperation from the system libc to store the - * line buffer in the FILE struct itself. */ - char *fgetln(FILE *fp, size_t *lenp) -- LIBBSD_DEPRECATED("This functions cannot be safely ported, " -- "use getline(3) instead, as it is supported " -- "by GNU and POSIX.1-2008."); -+ __attribute__((deprecated("This functions cannot be safely ported, " -+ "use getline(3) instead, as it is supported " -+ "by GNU and POSIX.1-2008."))); -+#else -+char *fgetln(FILE *fp, size_t *lenp); -+#endif - - /* - * Note: We diverge from the FreeBSD, OpenBSD and DragonFlyBSD declarations, -diff --git a/include/bsd/stdlib.h b/include/bsd/stdlib.h -index ebc9638..6cd7943 100644 ---- a/include/bsd/stdlib.h -+++ b/include/bsd/stdlib.h -@@ -67,9 +67,11 @@ 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(_GNU_SOURCE) && defined(__GLIBC__) && defined(__GLIBC_PREREQ) -+#if !__GLIBC_PREREQ(2, 26) - void *reallocarray(void *ptr, size_t nmemb, size_t size); - #endif -+#endif - - long long strtonum(const char *nptr, long long minval, long long maxval, - const char **errstr); diff --git a/include/bsd/string.h b/include/bsd/string.h -index 6798bf6..6baaa14 100644 +index f987fee..a1e17ed 100644 --- a/include/bsd/string.h +++ b/include/bsd/string.h -@@ -37,6 +37,12 @@ +@@ -41,10 +41,21 @@ #include <sys/types.h> __BEGIN_DECLS -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) -+size_t bsd_strlcpy(char *dst, const char *src, size_t siz); -+size_t bsd_strlcat(char *dst, const char *src, size_t siz); -+char *bsd_strnstr(const char *str, const char *find, size_t str_len); -+void bsd_strmode(mode_t mode, char *str); -+#else ++#if !HAVE_STRLCPY size_t strlcpy(char *dst, const char *src, size_t siz); ++#endif ++ ++#if !HAVE_STRLCAT size_t strlcat(char *dst, const char *src, size_t siz); ++#endif ++ ++#if !HAVE_STRNSTR char *strnstr(const char *str, const char *find, size_t str_len); -@@ -45,6 +51,7 @@ void strmode(mode_t mode, char *str); - #if defined(_GNU_SOURCE) && defined(__GLIBC__) && !__GLIBC_PREREQ(2, 25) - void explicit_bzero(void *buf, size_t len); - #endif +#endif - __END_DECLS ++ ++#if !HAVE_STRMODE + void strmode(mode_t mode, char *str); ++#endif - #endif + #if !defined(__GLIBC__) || \ + (defined(__GLIBC__) && (!__GLIBC_PREREQ(2, 25) || !defined(_GNU_SOURCE))) diff --git a/src/Makefile.am b/src/Makefile.am -index ad83dbf..0f2a7ee 100644 +index f3cc0fa..3aaecd4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am -@@ -54,17 +54,21 @@ libbsd_la_DEPENDENCIES = \ - libbsd.map +@@ -56,8 +56,10 @@ libbsd_la_DEPENDENCIES = \ libbsd_la_LIBADD = \ $(CLOCK_GETTIME_LIBS) -+ -+if IS_DARWIN -+libbsd_la_LDFLAGS = \ -+ -Wl \ -+ -version-number $(LIBBSD_ABI) -+else libbsd_la_LDFLAGS = \ - -Wl,--version-script=$(srcdir)/libbsd.map \ +- -Wl,--version-script=$(srcdir)/libbsd.map \ -version-number $(LIBBSD_ABI) ++if BUILD_LINK_VERSION_SCRIPT ++libbsd_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libbsd.map +endif -+ libbsd_la_SOURCES = \ arc4random.c \ -- arc4random.h \ -- arc4random_unix.h \ -- arc4random_openbsd.h \ - arc4random_uniform.c \ - bsd_getopt.c \ -- chacha_private.h \ - closefrom.c \ - dehumanize_number.c \ - err.c \ -@@ -117,6 +121,15 @@ libbsd_la_SOURCES += \ - $(nil) - endif - -+noinst_HEADERS = \ -+ arc4random.h \ -+ arc4random_bsd.h \ -+ arc4random_linux.h \ -+ arc4random_unix.h \ -+ arc4random_osx.h \ -+ arc4random_openbsd.h \ -+ chacha_private.h -+ - libbsd_ctor_a_SOURCES = \ - setproctitle_ctor.c \ - $(nil) -diff --git a/src/arc4random_bsd.h b/src/arc4random_bsd.h -new file mode 100644 -index 0000000..ece2f85 ---- /dev/null -+++ b/src/arc4random_bsd.h -@@ -0,0 +1,86 @@ -+/* $OpenBSD: arc4random_freebsd.h,v 1.2 2015/01/15 06:57:18 deraadt Exp $ */ -+ -+/* -+ * Copyright (c) 1996, David Mazieres <dm@uun.org> -+ * Copyright (c) 2008, Damien Miller <djm@openbsd.org> -+ * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> -+ * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> -+ * -+ * Permission to use, copy, modify, and distribute this software for any -+ * purpose with or without fee is hereby granted, provided that the above -+ * copyright notice and this permission notice appear in all copies. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+/* -+ * Stub functions for portability. -+ */ -+ -+#include <sys/mman.h> -+ -+#include <pthread.h> -+#include <signal.h> -+ -+static pthread_mutex_t arc4random_mtx = PTHREAD_MUTEX_INITIALIZER; -+#define _ARC4_LOCK() pthread_mutex_lock(&arc4random_mtx) -+#define _ARC4_UNLOCK() pthread_mutex_unlock(&arc4random_mtx) -+ -+/* -+ * Unfortunately, pthread_atfork() is broken on FreeBSD (at least 9 and 10) if -+ * a program does not link to -lthr. Callbacks registered with pthread_atfork() -+ * appear to fail silently. So, it is not always possible to detect a PID -+ * wraparound. -+ */ -+#define _ARC4_ATFORK(f) pthread_atfork(NULL, NULL, (f)) -+ -+static inline void -+_getentropy_fail(void) -+{ -+ raise(SIGKILL); -+} -+ -+static volatile sig_atomic_t _rs_forked; -+ -+static inline void -+_rs_forkhandler(void) -+{ -+ _rs_forked = 1; -+} -+ -+static inline void -+_rs_forkdetect(void) -+{ -+ static pid_t _rs_pid = 0; -+ pid_t pid = getpid(); -+ -+ if (_rs_pid == 0 || _rs_pid != pid || _rs_forked) { -+ _rs_pid = pid; -+ _rs_forked = 0; -+ if (rs) -+ memset(rs, 0, sizeof(*rs)); -+ } -+} -+ -+static inline int -+_rs_allocate(struct _rs **rsp, struct _rsx **rsxp) -+{ -+ if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, -+ MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) -+ return (-1); -+ -+ if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, -+ MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { -+ munmap(*rsp, sizeof(**rsp)); -+ return (-1); -+ } -+ -+ _ARC4_ATFORK(_rs_forkhandler); -+ return (0); -+} -diff --git a/src/arc4random_linux.h b/src/arc4random_linux.h -new file mode 100644 -index 0000000..d61a8db ---- /dev/null -+++ b/src/arc4random_linux.h -@@ -0,0 +1,86 @@ -+/* $OpenBSD: arc4random_linux.h,v 1.8 2014/08/13 06:04:10 deraadt Exp $ */ -+ -+/* -+ * Copyright (c) 1996, David Mazieres <dm@uun.org> -+ * Copyright (c) 2008, Damien Miller <djm@openbsd.org> -+ * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> -+ * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> -+ * -+ * Permission to use, copy, modify, and distribute this software for any -+ * purpose with or without fee is hereby granted, provided that the above -+ * copyright notice and this permission notice appear in all copies. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+/* -+ * Stub functions for portability. -+ */ -+ -+#include <sys/mman.h> -+ -+#include <pthread.h> -+#include <signal.h> -+ -+static pthread_mutex_t arc4random_mtx = PTHREAD_MUTEX_INITIALIZER; -+#define _ARC4_LOCK() pthread_mutex_lock(&arc4random_mtx) -+#define _ARC4_UNLOCK() pthread_mutex_unlock(&arc4random_mtx) -+ -+#ifdef __GLIBC__ -+extern void *__dso_handle; -+extern int __register_atfork(void (*)(void), void(*)(void), void (*)(void), void *); -+#define _ARC4_ATFORK(f) __register_atfork(NULL, NULL, (f), __dso_handle) -+#else -+#define _ARC4_ATFORK(f) pthread_atfork(NULL, NULL, (f)) -+#endif -+ -+static inline void -+_getentropy_fail(void) -+{ -+ raise(SIGKILL); -+} -+ -+static volatile sig_atomic_t _rs_forked; -+ -+static inline void -+_rs_forkhandler(void) -+{ -+ _rs_forked = 1; -+} -+ -+static inline void -+_rs_forkdetect(void) -+{ -+ static pid_t _rs_pid = 0; -+ pid_t pid = getpid(); -+ -+ if (_rs_pid == 0 || _rs_pid != pid || _rs_forked) { -+ _rs_pid = pid; -+ _rs_forked = 0; -+ if (rs) -+ memset(rs, 0, sizeof(*rs)); -+ } -+} -+ -+static inline int -+_rs_allocate(struct _rs **rsp, struct _rsx **rsxp) -+{ -+ if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, -+ MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) -+ return (-1); -+ -+ if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, -+ MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { -+ munmap(*rsp, sizeof(**rsp)); -+ return (-1); -+ } -+ -+ _ARC4_ATFORK(_rs_forkhandler); -+ return (0); -+} -diff --git a/src/arc4random_osx.h b/src/arc4random_osx.h -new file mode 100644 -index 0000000..14771a6 ---- /dev/null -+++ b/src/arc4random_osx.h -@@ -0,0 +1,82 @@ -+/* $OpenBSD: arc4random_osx.h,v 1.10 2015/09/11 11:52:55 deraadt Exp $ */ -+ -+/* -+ * Copyright (c) 1996, David Mazieres <dm@uun.org> -+ * Copyright (c) 2008, Damien Miller <djm@openbsd.org> -+ * Copyright (c) 2013, Markus Friedl <markus@openbsd.org> -+ * Copyright (c) 2014, Theo de Raadt <deraadt@openbsd.org> -+ * -+ * Permission to use, copy, modify, and distribute this software for any -+ * purpose with or without fee is hereby granted, provided that the above -+ * copyright notice and this permission notice appear in all copies. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+/* -+ * Stub functions for portability. -+ */ -+ -+#include <sys/mman.h> -+ -+#include <unistd.h> -+#include <pthread.h> -+#include <signal.h> -+ -+static pthread_mutex_t arc4random_mtx = PTHREAD_MUTEX_INITIALIZER; -+#define _ARC4_LOCK() pthread_mutex_lock(&arc4random_mtx) -+#define _ARC4_UNLOCK() pthread_mutex_unlock(&arc4random_mtx) -+ -+#define _ARC4_ATFORK(f) pthread_atfork(NULL, NULL, (f)) -+ -+static inline void -+_getentropy_fail(void) -+{ -+ raise(SIGKILL); -+} -+ -+static volatile sig_atomic_t _rs_forked; -+ -+static inline void -+_rs_forkhandler(void) -+{ -+ _rs_forked = 1; -+} -+ -+static inline void -+_rs_forkdetect(void) -+{ -+ static pid_t _rs_pid = 0; -+ pid_t pid = getpid(); -+ -+ if (_rs_pid == 0 || _rs_pid != pid || _rs_forked) { -+ _rs_pid = pid; -+ _rs_forked = 0; -+ if (rs) -+ memset(rs, 0, sizeof(*rs)); -+ } -+} -+ -+static inline int -+_rs_allocate(struct _rs **rsp, struct _rsx **rsxp) -+{ -+ if ((*rsp = mmap(NULL, sizeof(**rsp), PROT_READ|PROT_WRITE, -+ MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) -+ return (-1); -+ -+ if ((*rsxp = mmap(NULL, sizeof(**rsxp), PROT_READ|PROT_WRITE, -+ MAP_ANON|MAP_PRIVATE, -1, 0)) == MAP_FAILED) { -+ munmap(*rsp, sizeof(**rsp)); -+ *rsp = NULL; -+ return (-1); -+ } -+ -+ _ARC4_ATFORK(_rs_forkhandler); -+ return (0); -+} -diff --git a/src/fgetln.c b/src/fgetln.c -index 4d1726e..9c73788 100644 ---- a/src/fgetln.c -+++ b/src/fgetln.c -@@ -30,7 +30,9 @@ - #include <sys/types.h> - #include <string.h> - -+#if !defined(darwin) && !defined(__APPLE__) && !defined(MACOSX) - #include "local-link.h" -+#endif - - #ifdef HAVE_GETLINE - struct filebuf { -@@ -75,9 +77,11 @@ fgetln(FILE *stream, size_t *len) - return fb->buf; - } - } -+#if !defined(darwin) && !defined(__APPLE__) && !defined(MACOSX) - libbsd_link_warning(fgetln, - "This functions cannot be safely ported, use getline(3) " - "instead, as it is supported by GNU and POSIX.1-2008.") -+#endif - #else - #error "Function fgetln() needs to be ported." - #endif + arc4random.h \ diff --git a/src/fpurge.c b/src/fpurge.c -index 462535a..e7eb46f 100644 +index 462535a..a8941db 100644 --- a/src/fpurge.c +++ b/src/fpurge.c -@@ -26,9 +26,11 @@ +@@ -26,9 +26,10 @@ #include <errno.h> #include <stdio.h> -+#if HAVE___FPURGE - #include <stdio_ext.h> -+#endif +-#include <stdio_ext.h> --#ifdef HAVE___FPURGE -+#ifdef HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7 */ + #ifdef HAVE___FPURGE ++#include <stdio_ext.h> ++ int fpurge(FILE *fp) { -@@ -42,5 +44,55 @@ fpurge(FILE *fp) +@@ -41,6 +42,36 @@ fpurge(FILE *fp) + return 0; } - #else --#error "Function fpurge() needs to be ported." -+#define fp_ fp -+//#error "Function fpurge() needs to be ported." -+//#elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin 1.7 */ ++/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin 1.7 */ ++#elif HAVE_FPURGE +int +fpurge(FILE *fp) +{ @@ -501,12 +107,13 @@ index 462535a..e7eb46f 100644 + } + + /* Call the system's fpurge function. */ -+# undef fpurge -+# if !HAVE_DECL_FPURGE ++#undef fpurge ++#if !HAVE_DECL_FPURGE + extern int fpurge (FILE *); -+# endif ++#endif + int result = fpurge (fp); -+# if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */ ++/* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */ ++#if defined(__sferror) || defined(__DragonFly__) + if (result == 0) + /* Correct the invariants that fpurge broke. + <stdio.h> on BSD systems says: @@ -514,69 +121,35 @@ index 462535a..e7eb46f 100644 + If this invariant is not fulfilled and the stream is read-write but + currently reading, subsequent putc or fputc calls will write directly + into the buffer, although they shouldn't be allowed to. */ -+ if ((fp_->_flags & __SRD) != 0) -+ fp_->_w = 0; ++ if ((fp->_flags & __SRD) != 0) ++ fp->_w = 0; +#endif + return result; +} -+//#endif -+#endif -+ -+#ifdef TEST -+int -+main() -+{ -+ static FILE fp_bad; -+ FILE *fp; -+ -+ if (fpurge(&fp_bad) == 0) -+ return 1; -+ -+ fp = fopen("/dev/zero", "r"); -+ if (fpurge(fp) < 0) -+ return 1; -+ -+ fclose(fp); -+ -+ return 0; -+} + #else + #error "Function fpurge() needs to be ported." #endif diff --git a/src/funopen.c b/src/funopen.c -index 1e05c7e..75e61ea 100644 +index 1e05c7e..65ba5a8 100644 --- a/src/funopen.c +++ b/src/funopen.c @@ -143,6 +143,7 @@ funopen(const void *cookie, * they will not add the needed support to implement it. Just ignore this * interface there, as it has never been provided anyway. */ -+#elif defined(darwin) || defined(__APPLE__) || defined(MACOSX) ++#elif defined(__MACH__) #else #error "Function funopen() needs to be ported or disabled." #endif -diff --git a/src/getentropy.c b/src/getentropy.c -index 3f11a1e..8a23a07 100644 ---- a/src/getentropy.c -+++ b/src/getentropy.c -@@ -28,9 +28,7 @@ - #include "getentropy_linux.c" - #elif defined(__GNU__) - #include "getentropy_hurd.c" --#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) --#include "getentropy_bsd.c" --#elif defined(__NetBSD__) -+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) - #include "getentropy_bsd.c" - #elif defined(__sun) - #include "getentropy_solaris.c" diff --git a/src/hash/sha512.h b/src/hash/sha512.h -index 4f368a1..ab22fc1 100644 +index 4f368a1..7632e25 100644 --- a/src/hash/sha512.h +++ b/src/hash/sha512.h @@ -29,7 +29,11 @@ #ifndef _SHA512_H_ #define _SHA512_H_ -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) ++#ifdef __MACH__ +#include <stdint.h> +#else #include <sys/types.h> @@ -585,16 +158,15 @@ index 4f368a1..ab22fc1 100644 #define SHA512_DIGEST_LENGTH 64 diff --git a/src/hash/sha512c.c b/src/hash/sha512c.c -index b3c8d5e..f69013d 100644 +index b3c8d5e..602f54e 100644 --- a/src/hash/sha512c.c +++ b/src/hash/sha512c.c -@@ -25,7 +25,13 @@ +@@ -25,7 +25,12 @@ */ #include <sys/cdefs.h> -+__FBSDID("$FreeBSD$"); + -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) ++#ifdef __MACH__ +#include <machine/endian.h> +#else #include <sys/endian.h> @@ -602,102 +174,188 @@ index b3c8d5e..f69013d 100644 #include <sys/types.h> #include <string.h> +diff --git a/src/local-link.h b/src/local-link.h +index d518dcf..84694a2 100644 +--- a/src/local-link.h ++++ b/src/local-link.h +@@ -27,7 +27,11 @@ + #ifndef LIBBSD_LOCAL_LINK_H + #define LIBBSD_LOCAL_LINK_H + ++#ifdef __MACH__ ++#define libbsd_link_warning(symbol, msg) ++#else + #define libbsd_link_warning(symbol, msg) \ + static const char libbsd_emit_link_warning_##symbol[] \ + __attribute__((used,section(".gnu.warning." #symbol))) = msg; + #endif ++#endif diff --git a/src/nlist.c b/src/nlist.c -index 0932f59..598a329 100644 +index 0932f59..4502048 100644 --- a/src/nlist.c +++ b/src/nlist.c -@@ -27,6 +27,10 @@ - * SUCH DAMAGE. - */ +@@ -41,6 +41,7 @@ + #include <unistd.h> + #include <nlist.h> -+#if !defined(darwin) && !defined(__APPLE__) && !defined(MACOSX) -+#if defined(LIBC_SCCS) && !defined(lint) -+static char sccsid[] = "@(#)nlist.c 8.1 (Berkeley) 6/4/93"; -+#endif /* LIBC_SCCS and not lint */ - #include <sys/cdefs.h> ++#if !HAVE_NLIST_H + #include "local-elf.h" - #include <sys/param.h> -@@ -265,3 +269,4 @@ nlist(const char *name, struct nlist *list) + #define SIZE_T_MAX 0xffffffffU +@@ -265,3 +266,4 @@ nlist(const char *name, struct nlist *list) (void)close(fd); return (n); } -+#endif /* _NLIST_DO_ELF */ ++#endif +diff --git a/src/readpassphrase.c b/src/readpassphrase.c +index f9f6195..2bc5fb4 100644 +--- a/src/readpassphrase.c ++++ b/src/readpassphrase.c +@@ -36,6 +36,14 @@ + #define TCSASOFT 0 + #endif + ++#ifndef _SIGMAX ++#define _SIGMAX 64 ++#endif ++ ++#ifndef _NSIG ++#define _NSIG (_SIGMAX + 1) ++#endif ++ + static volatile sig_atomic_t signo[_NSIG]; + + static void handler(int); diff --git a/src/setproctitle.c b/src/setproctitle.c -index 038ac7d..d0ef01b 100644 +index 038ac7d..e9ee09c 100644 --- a/src/setproctitle.c +++ b/src/setproctitle.c -@@ -32,6 +32,11 @@ +@@ -32,6 +32,10 @@ #include <unistd.h> #include <string.h> -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) -+#define __asm__(x) ++#ifdef __MACH__ +extern char **environ; +#endif + static struct { /* Original value. */ const char *arg0; -@@ -287,7 +292,14 @@ __asm__(".symver setproctitle_impl,setproctitle@@LIBBSD_0.5"); +@@ -280,16 +284,22 @@ setproctitle_impl(const char *fmt, ...) + *++nul = '\0'; + } + } ++#ifndef __MACH__ + __asm__(".symver setproctitle_impl,setproctitle@@LIBBSD_0.5"); ++#endif + + /* The original function introduced in 0.2 was a stub, it only got implemented + * in 0.5, make the implementation available in the old version as an alias * for code linking against that version, and change the default to use the * new version, so that new code depends on the implemented version. */ - #ifdef HAVE_TYPEOF -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) -+// -+// HACK: even weak aliasing breaks in clang so just comment this out for now -+// -+// extern typeof(setproctitle_impl) setproctitle_stub __attribute__((weak, alias("setproctitle_impl"))); -+#else +-#ifdef HAVE_TYPEOF ++#ifdef __MACH__ ++void setproctitle_stub(const char *fmt, ...); ++#elif HAVE_TYPEOF extern typeof(setproctitle_impl) setproctitle_stub __attribute__((alias("setproctitle_impl"))); -+#endif #else void setproctitle_stub(const char *fmt, ...) __attribute__((alias("setproctitle_impl"))); + #endif ++#ifndef __MACH__ + __asm__(".symver setproctitle_stub,setproctitle@LIBBSD_0.2"); ++#endif diff --git a/src/strlcat.c b/src/strlcat.c -index 14c53a1..e01cb60 100644 +index 14c53a1..5961c17 100644 --- a/src/strlcat.c +++ b/src/strlcat.c -@@ -27,7 +27,11 @@ +@@ -26,6 +26,7 @@ + * Returns strlen(src) + MIN(dsize, strlen(initial dst)). * If retval >= dsize, truncation occurred. */ ++#if !HAVE_STRLCAT size_t -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) -+bsd_strlcat(char *dst, const char *src, size_t dsize) -+#else strlcat(char *dst, const char *src, size_t dsize) -+#endif { - const char *odst = dst; - const char *osrc = src; +@@ -53,3 +54,4 @@ strlcat(char *dst, const char *src, size_t dsize) + + return(dlen + (src - osrc)); /* count does not include NUL */ + } ++#endif diff --git a/src/strlcpy.c b/src/strlcpy.c -index e9a7fe4..10a855f 100644 +index e9a7fe4..5137acb 100644 --- a/src/strlcpy.c +++ b/src/strlcpy.c -@@ -25,7 +25,11 @@ +@@ -24,6 +24,7 @@ + * chars will be copied. Always NUL terminates (unless dsize == 0). * Returns strlen(src); if retval >= dsize, truncation occurred. */ ++#if !HAVE_STRLCPY size_t -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) -+bsd_strlcpy(char *dst, const char *src, size_t dsize) -+#else strlcpy(char *dst, const char *src, size_t dsize) -+#endif { - const char *osrc = src; - size_t nleft = dsize; +@@ -48,3 +49,4 @@ strlcpy(char *dst, const char *src, size_t dsize) + + return(src - osrc - 1); /* count does not include NUL */ + } ++#endif diff --git a/src/strmode.c b/src/strmode.c -index e6afde5..c463243 100644 +index e6afde5..da680c9 100644 --- a/src/strmode.c +++ b/src/strmode.c -@@ -33,7 +33,11 @@ +@@ -32,6 +32,7 @@ + #include <sys/stat.h> #include <string.h> ++#if !HAVE_STRMODE void -+#if defined(darwin) || defined(__APPLE__) || defined(MACOSX) -+bsd_strmode(mode_t mode, char *p) -+#else strmode(mode_t mode, char *p) + { +@@ -141,3 +142,4 @@ strmode(mode_t mode, char *p) + *p++ = ' '; /* will be a '+' if ACL's implemented */ + *p = '\0'; + } ++#endif +diff --git a/src/unvis.c b/src/unvis.c +index 94e3e7a..fba4c66 100644 +--- a/src/unvis.c ++++ b/src/unvis.c +@@ -565,11 +565,15 @@ strnunvis_openbsd(char *dst, const char *src, size_t dlen) + { + return strnunvisx(dst, dlen, src, 0); + } ++#ifndef __MACH__ + __asm__(".symver strnunvis_openbsd,strnunvis@@LIBBSD_0.2"); ++#endif + + int + strnunvis_netbsd(char *dst, size_t dlen, const char *src) + { + return strnunvisx(dst, dlen, src, 0); + } ++#ifndef __MACH__ + __asm__(".symver strnunvis_netbsd,strnunvis@LIBBSD_0.9.1"); +#endif +diff --git a/src/vis.c b/src/vis.c +index c2cd2d8..2d84330 100644 +--- a/src/vis.c ++++ b/src/vis.c +@@ -723,14 +723,18 @@ strnvis_openbsd(char *mbdst, const char *mbsrc, size_t dlen, int flags) { - /* print type */ - switch (mode & S_IFMT) { + return istrsenvisxl(&mbdst, &dlen, mbsrc, flags, "", NULL); + } ++#ifndef __MACH__ + __asm__(".symver strnvis_openbsd,strnvis@@LIBBSD_0.2"); ++#endif + + int + strnvis_netbsd(char *mbdst, size_t dlen, const char *mbsrc, int flags) + { + return istrsenvisxl(&mbdst, &dlen, mbsrc, flags, "", NULL); + } ++#ifndef __MACH__ + __asm__(".symver strnvis_netbsd,strnvis@LIBBSD_0.9.1"); ++#endif + + int + stravis(char **mbdstp, const char *mbsrc, int flags) diff --git a/pkgs/development/libraries/libbsd/default.nix b/pkgs/development/libraries/libbsd/default.nix index b304b73e7e039..dc7213acd6388 100644 --- a/pkgs/development/libraries/libbsd/default.nix +++ b/pkgs/development/libraries/libbsd/default.nix @@ -13,16 +13,7 @@ stdenv.mkDerivation rec { # the configure scripts nativeBuildInputs = [ autoreconfHook ]; - patches = stdenv.lib.optional stdenv.isDarwin ./darwin.patch - # Suitable for all, but limited to musl to avoid rebuilds - ++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [ - # https://cgit.freedesktop.org/libbsd/commit/?id=1f8a3f7bccfc84b195218ad0086ebd57049c3490 - ./non-glibc.patch - # https://cgit.freedesktop.org/libbsd/commit/?id=11ec8f1e5dfa1c10e0c9fb94879b6f5b96ba52dd - ./cdefs.patch - # https://cgit.freedesktop.org/libbsd/commit/?id=b20272f5a966333b49fdf2bda797e2a9f0227404 - ./features.patch - ]; + patches = stdenv.lib.optional stdenv.isDarwin ./darwin.patch; meta = with stdenv.lib; { description = "Common functions found on BSD systems"; diff --git a/pkgs/development/libraries/libbsd/features.patch b/pkgs/development/libraries/libbsd/features.patch deleted file mode 100644 index 66bd1e9232bad..0000000000000 --- a/pkgs/development/libraries/libbsd/features.patch +++ /dev/null @@ -1,26 +0,0 @@ -From b20272f5a966333b49fdf2bda797e2a9f0227404 Mon Sep 17 00:00:00 2001 -From: Guillem Jover <guillem@hadrons.org> -Date: Tue, 6 Mar 2018 01:42:52 +0100 -Subject: Remove <features.h> inclusion from <bsd/libutil.h> - -This is a non-portable header, and we should not assume it is present. -Let the first system header pull it in if needed. ---- - include/bsd/libutil.h | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/include/bsd/libutil.h b/include/bsd/libutil.h -index ccca29a..e5f148a 100644 ---- a/include/bsd/libutil.h -+++ b/include/bsd/libutil.h -@@ -39,7 +39,6 @@ - #ifndef LIBBSD_LIBUTIL_H - #define LIBBSD_LIBUTIL_H - --#include <features.h> - #ifdef LIBBSD_OVERLAY - #include <sys/cdefs.h> - #else --- -cgit v1.1 - diff --git a/pkgs/development/libraries/libbsd/non-glibc.patch b/pkgs/development/libraries/libbsd/non-glibc.patch deleted file mode 100644 index f61e0d242943a..0000000000000 --- a/pkgs/development/libraries/libbsd/non-glibc.patch +++ /dev/null @@ -1,74 +0,0 @@ -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: 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. - -Reported-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 -@@ -59,6 +59,14 @@ - #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. - */ - #ifndef _SYS_CDEFS_H_ --- -cgit v1.1 - |