rc

[fork] interactive rc shell
Log | Files | Refs | README | LICENSE

commit d3102fa7de519677c917beb108a71b81ef9a8abc
parent 8a11028b592d1c7a5b408475fdc3028b04ab6ffa
Author: tgoodwin <tgoodwin>
Date:   Mon, 27 Jul 1998 13:26:37 +0000

add RC_FUNC_GETGROUPS configure magic

Diffstat:
Macconfig.h | 3+++
Macinclude.m4 | 20+++++++++++++++++++-
Mconfigure.ac | 6+++---
Mwhich.c | 12+++++++++++-
4 files changed, 36 insertions(+), 5 deletions(-)

diff --git a/acconfig.h b/acconfig.h @@ -72,3 +72,6 @@ /* Define if you have SA_INTERRUPT (and sigaction()). */ #undef HAVE_SA_INTERRUPT + +/* Define if you have POSIX getgroups(). */ +#undef HAVE_POSIX_GETGROUPS diff --git a/acinclude.m4 b/acinclude.m4 @@ -1,3 +1,19 @@ +dnl This macro sets HAVE_POSIX_GETGROUPS if the +dnl getgroups() function accepts a zero first argument. +AC_DEFUN(RC_FUNC_GETGROUPS, [ + AC_CACHE_CHECK(for POSIX getgroups, rc_cv_func_posix_getgroups, AC_TRY_RUN([ +#include <sys/types.h> +#include <unistd.h> +int main(void) { + return getgroups(0, (void *)0) == -1; +} + ], rc_cv_func_posix_getgroups=yes, rc_cv_func_posix_getgroups=no, rc_cv_func_posix_getgroups=yes)) + case "$rc_cv_func_posix_getgroups" in + yes) AC_DEFINE(HAVE_POSIX_GETGROUPS) ;; + esac +]) + + dnl The AC_FUNC_SETPGRP macro doesn't dnl #include <unistd.h>, so it fails on OSF-1, where setpgrp dnl will happily accept arguments, but the protoype doesn't @@ -7,7 +23,9 @@ AC_DEFUN(RC_FUNC_SETPGRP, [ AC_CACHE_CHECK(for setpgrp that takes no arguments, ac_cv_func_setpgrp_void, AC_TRY_RUN([ #include <unistd.h> /* If setpgrp() takes no arguments, this may fail to compile, but -if it compiles the call should succeed. */ +if it compiles the call should succeed. Note that the assignments +to ac_cv_func_setpgrp_void are the other way round from what you +would expect. */ int main(void) { return setpgrp(1,1) != -1; } diff --git a/configure.ac b/configure.ac @@ -1,12 +1,12 @@ AC_INIT(rc.h) dnl Automake stuff. -AM_INIT_AUTOMAKE(rc, 1.5s19980724) +AM_INIT_AUTOMAKE(rc, 1.5s19980727) AM_CONFIG_HEADER(config.h) AC_ARG_PROGRAM -AC_DEFINE(RELDATE, "1998-07-24") +AC_DEFINE(RELDATE, "1998-07-27") dnl If we're using gcc, specify `-Wall'. I've also checked the code dnl with `-pedantic -W -Wall -Wpointer-arith -Wstrict-prototypes @@ -36,7 +36,7 @@ AC_TYPE_UID_T AC_CHECK_TYPE(ssize_t, long) AC_CHECK_FUNCS(getgroups setpgrp setrlimit) - +RC_FUNC_GETGROUPS dnl sigsetjmp() isn't a real function in some places. AC_CACHE_CHECK(for sigsetjmp, rc_cv_sigsetjmp, diff --git a/which.c b/which.c @@ -8,10 +8,12 @@ and to strip out unneeded functionality. */ -#include "rc.h" #include <errno.h> #include <sys/stat.h> +#include "rc.h" +#include "getgroups.h" + #define X_USR 0100 #define X_GRP 0010 #define X_OTH 0001 @@ -83,7 +85,15 @@ extern char *which(char *name, bool verbose) { uid = geteuid(); gid = getegid(); #if HAVE_GETGROUPS +#if HAVE_POSIX_GETGROUPS ngroups = getgroups(0, (GETGROUPS_T *)0); + if (ngroups < 0) { + uerror("getgroups"); + rc_exit(1); + } +#else + ngroups = NGROUPS; +#endif gidset = ealloc(ngroups * sizeof(GETGROUPS_T)); getgroups(ngroups, gidset); #endif