The function does not calculate groups, it sets groups access list of the current process in accordance to user information in /etc/groups.Quote from Unix manual page for initgroups:NAME initgroups - initialize the supplementary group access list...DESCRIPTION The initgroups() function initializes the group access list by reading the group database /etc/group and using all groups of which user is a member. The additional group group is also added to the list.