- int n_groups;
- int n_group_slots = getgroups (0, NULL);
- gid_t *group;
-
- if (n_group_slots < 0)
- return false;
-
- /* Avoid xnmalloc, as it goes awry when SIZE_MAX < n_group_slots. */
- if (xalloc_oversized (n_group_slots, sizeof *group))
- xalloc_die ();
- group = xmalloc (n_group_slots * sizeof *group);
- n_groups = getgroups (n_group_slots, group);
+ int n_groups = getgroups (GROUPBUF_SIZE, gi->groupbuf);
+ gi->group = gi->groupbuf;