diff options
author | Tom Lee <github@tomlee.co> | 2015-11-18 00:04:54 -0800 |
---|---|---|
committer | Tom Lee <github@tomlee.co> | 2015-11-18 00:28:10 -0800 |
commit | bb1747b1bf92431e5c5e9699824d2ef52f863f45 (patch) | |
tree | 337c54763f6166f0868ceaaa32dcd1c5f7948daa | |
parent | db1c46dac7f0c54310e05a682cc444b7ae287dcf (diff) |
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.
-rw-r--r-- | fmacros.h | 4 |
1 files changed, 1 insertions, 3 deletions
@@ -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__ |