Wolfgang Lux wrote: > I was going about to write the test, but then I found that autoconf already > has a predefined test for it (obviously, we are not the only ones struggling > with this dichotomy :-) > > -- Macro: AC_FUNC_STRERROR_R > If `strerror_r' is available, define `HAVE_STRERROR_R', and if it > is declared, define `HAVE_DECL_STRERROR_R'. If it returns a `char > *' message, define `STRERROR_R_CHAR_P'; otherwise it returns an > `int' error number. The Thread-Safe Functions option of Posix > requires `strerror_r' to return `int', but many systems > (including, for example, version 2.2.4 of the GNU C Library) > return a `char *' value that is not necessarily equal to the > buffer argument. > > So instead of using > AC_CHECK_FUNCS(strerror_r strerror) > in configure.ac, we should be using > AC_CHECK_FUNCS(strerror) > AC_FUNC_STRERROR_R > and add STRERROR_R_CHAR_P to config.h.in and use it to select a suitable > variant of the code in the _systemError: method.
I have implemented this. The configure script checks for the variant of strerror_r and the _systemError: method now contains code for the glibc variant of strerror_r. Doing that, I had to remove the code from common.h that was undefining _GNU_SOURCE and conditionally defining _XOPEN_SOURCE, as that could invalidate the result of the autoconf test. I tested this on both OS X (using the POSIX variant) and Linux (using the glibc version) and this seems to work. I think it should also work for systems where strerror_r is not defined at all and we define our own, POSIX compatible version, but I have no system to test this. Wolfgang _______________________________________________ Gnustep-dev mailing list Gnustep-dev@gnu.org https://lists.gnu.org/mailman/listinfo/gnustep-dev