1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #include "libbb.h"
- gid_t* FAST_FUNC bb_getgroups(int *ngroups, gid_t *group_array)
- {
- int n = ngroups ? *ngroups : 0;
-
- if (n < 32)
- n = 32;
- for (;;) {
- group_array = xrealloc(group_array, (n+1) * sizeof(group_array[0]));
- n = getgroups(n, group_array);
-
- if (n >= 0) {
-
- group_array[n] = (gid_t) -1;
- break;
- }
- if (errno == EINVAL) {
-
- n = getgroups(0, group_array);
- continue;
- }
-
- bb_perror_msg_and_die("getgroups");
- }
- if (ngroups)
- *ngroups = n;
- return group_array;
- }
|