rem: tail = (struct userid *) xmalloc (sizeof (struct userid));
add: tail = xmalloc (sizeof (struct userid));
context: getgidbyname (const char *group){  register struct userid *tail;  struct group *grent;  for (tail = group_alist; tail; tail = tail->next)    /* Avoid a function call for the most common case.  */    if (*tail->name == *group && !strcmp (tail->name, group))      return &tail->id.g;  for (tail = nogroup_alist; tail; tail = tail->next)    /* Avoid a function call for the most common case.  */    if (*tail->name == *group && !strcmp (tail->name, group))      return 0;  grent = getgrnam (group);#ifdef __DJGPP__  /* We need to pretend to belong to group GROUP, to make     grp functions know about any arbitrary group name.  */  if (!grent && strspn (group, digits) < strlen (group))    {      setenv ("GROUP", group, 1);      grent = getgrnam (group);	/* now it will succeed */    }#endif  tail = (struct userid *) xmalloc (sizeof (struct userid));  tail->name = xstrdup (group);  /* Add to the head of the list, so most recently used is first.  */  if (grent)    {      tail->id.g = grent->gr_gid;      tail->next = group_alist;      group_alist = tail;      return &tail->id.g;    }  tail->next = nogroup_alist;  nogroup_alist = tail;  return 0;}