diff options
author | Ting-Wei Lan <lantw@src.gnome.org> | 2015-09-05 23:35:57 +0800 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2015-09-07 15:18:01 -0400 |
commit | ebf961a58d540ea40611ad75bc983f5386d3635b (patch) | |
tree | 7e2cdb9ca32b1db81ceb181352d01b527c2e8b1f | |
parent | e773acfe9a0f8cf4d67799f6177997bd8a761ede (diff) | |
download | glib-ebf961a58d540ea40611ad75bc983f5386d3635b.tar.gz |
Make g_strerror work with non-glibc POSIX systems
We should only use GNU-specific strerror_r on glibc. On other systems,
we should use the XSI-compliant version.
https://bugzilla.gnome.org/show_bug.cgi?id=754601
-rw-r--r-- | glib/gstrfuncs.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/glib/gstrfuncs.c b/glib/gstrfuncs.c index f1085a1ba..2f0cda1dc 100644 --- a/glib/gstrfuncs.c +++ b/glib/gstrfuncs.c @@ -1258,14 +1258,19 @@ g_strerror (gint errnum) gint saved_errno = errno; GError *error = NULL; - /* Since we are building with _GNU_SOURCE, we get the - * GNU variant of strerror_r (with glibc). - */ #ifdef G_OS_WIN32 strerror_s (buf, sizeof (buf), errnum); msg = buf; -#else + /* If we're using glibc, since we are building with _GNU_SOURCE, we + * expect to get the GNU variant of strerror_r. However, use the + * provided check from man strerror_r(3) in case we ever stop using + * _GNU_SOURCE (admittedly unlikely). + */ +#elif (defined __GLIBC__) && !((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && ! _GNU_SOURCE) msg = strerror_r (errnum, buf, sizeof (buf)); +#else + strerror_r (errnum, buf, sizeof (buf)); + msg = buf; #endif if (!g_get_charset (NULL)) { |