5 int getgrouplist(const char *user, gid_t gid, gid_t *groups, int *ngroups)
9 if (*ngroups<1) return -1;
15 while ((gr = getgrent()) && *ngroups < INT_MAX) {
16 for (i=0; gr->gr_mem[i] && strcmp(user, gr->gr_mem[i]); i++);
17 if (!gr->gr_mem[i]) continue;
18 if (++*ngroups <= n) *groups++ = gr->gr_gid;
22 return *ngroups > n ? -1 : *ngroups;