From bb1747b1bf92431e5c5e9699824d2ef52f863f45 Mon Sep 17 00:00:00 2001 From: Tom Lee Date: Wed, 18 Nov 2015 00:04:54 -0800 Subject: Fix strerror_r on some esoteric platforms Defining _XOPEN_SOURCE=1 causes strange behavior on Debian kfreebsd archs (i.e. GNU userspace with FreeBSD kernel) when _GNU_SOURCE is not defined. Not sure I fully understand the bizarre semantics, but it seems to use the XSI-compliant interface (int strerror_r(int, char*, size_t)) but the GNU implementation (char *strerror_r(int, char*, size_t)) such that strerror_r returns 32-bits of a 64-bit char * on x86_64 kfreebsd. We would expect strerror_r to return zero when using the XSI-compliant strerror_r implementation or a 64-bit char* when using the GNU version. Instead, we get something in between! Unless I'm missing something, being more explicit about what version of _XOPEN_SOURCE we want seems to be the prudent thing to do here -- and if folks want the GNU implementation of strerror_r for some reason they can always -D_GNU_SOURCE explicitly. --- fmacros.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'fmacros.h') diff --git a/fmacros.h b/fmacros.h index 19d7b21..2d7348b 100644 --- a/fmacros.h +++ b/fmacros.h @@ -8,10 +8,8 @@ #if defined(__sun__) #define _POSIX_C_SOURCE 200112L -#elif defined(__linux__) || defined(__OpenBSD__) || defined(__NetBSD__) -#define _XOPEN_SOURCE 600 #else -#define _XOPEN_SOURCE +#define _XOPEN_SOURCE 600 #endif #if __APPLE__ && __MACH__ -- cgit v1.2.3