# HG changeset patch # User Paul Eggert # Date 1435681927 25200 # Node ID cbcda721f9b4f06bf0a00e8977d82ab2ca6f272e # Parent e856c861873802eb2021a8ceeff839c54a4bb77c mgetgroups: port to strict OS X The previous fix wasn't working, so use a bigger hammer (Bug#20923). * lib/mgetgroups.c: Ignore -Wpointer-sign diagnostics. (getgrouplist_gids) [HAVE_GETGROUPLIST]: Remove. All uses removed. * m4/mgetgroups.m4 (gl_MGETGROUPS): Revert recent changes. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2015-06-30 Paul Eggert + + mgetgroups: port to strict OS X + The previous fix wasn't working, so use a bigger hammer (Bug#20923). + * lib/mgetgroups.c: Ignore -Wpointer-sign diagnostics. + (getgrouplist_gids) [HAVE_GETGROUPLIST]: Remove. All uses removed. + * m4/mgetgroups.m4 (gl_MGETGROUPS): Revert recent changes. + 2015-06-29 Paul Eggert mgetgroups: port to strict OS X diff --git a/lib/mgetgroups.c b/lib/mgetgroups.c --- a/lib/mgetgroups.c +++ b/lib/mgetgroups.c @@ -33,6 +33,12 @@ #include "getugroups.h" #include "xalloc-oversized.h" +/* Work around an incompatibility of OS X 10.11: getgrouplist + accepts int *, not gid_t *, and int and gid_t differ in sign. */ +#if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) +# pragma GCC diagnostic ignored "-Wpointer-sign" +#endif + static gid_t * realloc_groupbuf (gid_t *g, size_t num) { @@ -64,11 +70,6 @@ gid_t *g; #if HAVE_GETGROUPLIST -# if HAVE_GETGROUPLIST_WITH_INT -# define getgrouplist_gids(g) ((int *) (g)) -# else -# define getgrouplist_gids(g) (g) -# endif /* We prefer to use getgrouplist if available, because it has better performance characteristics. @@ -92,8 +93,7 @@ int last_n_groups = max_n_groups; /* getgrouplist updates max_n_groups to num required. */ - ng = getgrouplist (username, gid, getgrouplist_gids (g), - &max_n_groups); + ng = getgrouplist (username, gid, g, &max_n_groups); /* Some systems (like Darwin) have a bug where they never increase max_n_groups. */ diff --git a/m4/mgetgroups.m4 b/m4/mgetgroups.m4 --- a/m4/mgetgroups.m4 +++ b/m4/mgetgroups.m4 @@ -1,4 +1,4 @@ -#serial 7 +#serial 5 dnl Copyright (C) 2007-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -6,38 +6,5 @@ AC_DEFUN([gl_MGETGROUPS], [ - AC_CHECK_HEADERS_ONCE([grp.h]) AC_CHECK_FUNCS_ONCE([getgrouplist]) - if test "$ac_cv_func_getgrouplist" = yes; then - AC_CACHE_CHECK([for getgrouplist with int signature], - [gl_cv_getgrouplist_with_int], - [gl_cv_getgrouplist_with_int=no - gl_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#if HAVE_GRP_H - #include - #endif - int groups[1]; - int ngroups = 1; - ]], - [[return - getgrouplist ("root", 0, groups, &ngroups);]])], - [], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#if HAVE_GRP_H - #include - #endif - int groups[sizeof (gid_t) == sizeof (int) ? 1 : -1]; - int ngroups = 1; - ]], - [[return - getgrouplist ("root", 0, groups, &ngroups);]])], - [gl_cv_getgrouplist_with_int=yes])]) - ac_c_werror_flag=$gl_save_c_werror_flag]) - if test "$gl_cv_getgrouplist_with_int" = yes; then - AC_DEFINE([HAVE_GETGROUPLIST_WITH_INT], 1, - [Define to 1 if getgrouplist accepts and returns int and not gid_t.]) - fi - fi ])