- grptbl = calloc (modulo, sizeof (grphash));
- if (grptbl == NULL)
- return -1;
- gidtbl = calloc (modulo, sizeof (grphash));
- if (gidtbl == NULL)
- return -1;
- negtbl = calloc (modulo, sizeof (neghash));
- if (negtbl == NULL)
- return -1;
-
- pthread_attr_init (&attr);
- pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
-
- pthread_create (&thread, NULL, grptable_update, &attr);
- pthread_create (&thread, NULL, negtable_update, &attr);
-
- pthread_attr_destroy (&attr);
-
- return 0;
-}
-
-static struct group *
-save_grp (struct group *src)
-{
- struct group *dest;
- unsigned long int l;
- size_t tlen;
- size_t name_len = strlen (src->gr_name) + 1;
- size_t passwd_len = strlen (src->gr_passwd) + 1;
- char *cp;
-
- /* How many members does this group have? */
- l = tlen = 0;
- while (src->gr_mem[l] != NULL)
- tlen += strlen (src->gr_mem[l++]) + 1;
-
- dest = malloc (sizeof (struct group) + (l + 1) * sizeof (char *)
- + name_len + passwd_len + tlen);
- if (dest == NULL)
- return NULL;
-
- dest->gr_mem = (char **) (dest + 1);
- cp = (char *) (dest->gr_mem + l + 1);
-
- dest->gr_name = cp;
- cp = mempcpy (cp, src->gr_name, name_len);
- dest->gr_passwd = cp;
- cp = mempcpy (cp, src->gr_passwd, passwd_len);
- dest->gr_gid = src->gr_gid;
-
- l = 0;
- while (src->gr_mem[l] != NULL)