fix dirname to handle input of form "foo/" correctly
[musl] / src / misc / getgrouplist.c
1 #include <grp.h>
2 #include <string.h>
3 #include <limits.h>
4
5 int getgrouplist(const char *user, gid_t gid, gid_t *groups, int *ngroups)
6 {
7         size_t n, i;
8         struct group *gr;
9         if (*ngroups<1) return -1;
10         n = *ngroups;
11         *groups++ = gid;
12         *ngroups = 1;
13
14         setgrent();
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;
19         }
20         endgrent();
21
22         return *ngroups > n ? -1 : *ngroups;
23 }