diff options
Diffstat (limited to 'pkgs/development/libraries/libbsd/darwin.patch')
-rw-r--r-- | pkgs/development/libraries/libbsd/darwin.patch | 752 |
1 files changed, 205 insertions, 547 deletions
diff --git a/pkgs/development/libraries/libbsd/darwin.patch b/pkgs/development/libraries/libbsd/darwin.patch index 4bddec6b0ffd..0f9cc9aaf964 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) |