bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bug#14463: coreutils-8.21 darwin regressions


From: Paul Eggert
Subject: Re: bug#14463: coreutils-8.21 darwin regressions
Date: Wed, 13 Nov 2013 07:57:28 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0

Thanks, I pushed the following patch to gnulib.  It should be
incorporated automatically into the next version of coreutils
so I'm marking the bug as done.

diff --git a/ChangeLog b/ChangeLog
index 59de3e5..aae8c64 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-11-13  Paul Eggert  <address@hidden>
+
+       * lib/getgroups.c (posix_getgroups, getgroups) [__APPLE__]:
+       New function and macro, to work around _DARWIN_C_SOURCE problem.
+       Reported by Jack Howarth in <http://bugs.gnu.org/14463>.
+
 2013-11-11  Pádraig Brady <address@hidden>
 
        base64: provide a fast path for encoding well sized buffers
diff --git a/lib/getgroups.c b/lib/getgroups.c
index e71b543..482b24a 100644
--- a/lib/getgroups.c
+++ b/lib/getgroups.c
@@ -43,6 +43,21 @@ getgroups (int n _GL_UNUSED, GETGROUPS_T *groups _GL_UNUSED)
 #  define GETGROUPS_ZERO_BUG 0
 # endif
 
+/* On OS X 10.6 and later, use the usual getgroups, not the one
+   supplied when _DARWIN_C_SOURCE is defined.  _DARWIN_C_SOURCE is
+   normally defined, since it means "conform to POSIX, but add
+   non-POSIX extensions even if that violates the POSIX namespace
+   rules", which is what we normally want.  But with getgroups there
+   is an inconsistency, and _DARWIN_C_SOURCE means "change getgroups()
+   so that it no longer works right".  The BUGS section of compat(5)
+   says that the behavior is dubious if you compile different sections
+   of a program with different _DARWIN_C_SOURCE settings, so fix only
+   the offending symbol.  */
+# ifdef __APPLE__
+int posix_getgroups (int, gid_t []) __asm ("_getgroups");
+#  define getgroups posix_getgroups
+# endif
+
 /* On at least Ultrix 4.3 and NextStep 3.2, getgroups (0, NULL) always
    fails.  On other systems, it returns the number of supplemental
    groups for the process.  This function handles that special case



reply via email to

[Prev in Thread] Current Thread [Next in Thread]