+ _gr_file = file;
+}
+
+static
+grscan(search, gid, name)
+ register int search, gid;
+ register char *name;
+{
+ register char *cp, **m;
+ char *fgets(), *strsep(), *index();
+
+ for (;;) {
+ if (!fgets(line, sizeof(line), _gr_fp))
+ return(0);
+ /* skip lines that are too big */
+ if (!index(line, '\n')) {
+ int ch;
+
+ while ((ch = getc(_gr_fp)) != '\n' && ch != EOF)
+ ;
+ continue;
+ }
+ _gr_group.gr_name = strsep(line, ":\n");
+ if (search && name && strcmp(_gr_group.gr_name, name))
+ continue;
+ _gr_group.gr_passwd = strsep((char *)NULL, ":\n");
+ if (!(cp = strsep((char *)NULL, ":\n")))
+ continue;
+ _gr_group.gr_gid = atoi(cp);
+ if (search && gid && _gr_group.gr_gid != gid)
+ continue;
+ for (m = _gr_group.gr_mem = members;; ++m) {
+ if (m == &members[MAXGRP - 1]) {
+ *m = NULL;
+ break;
+ }
+ if ((*m = strsep((char *)NULL, ", \n")) == NULL)
+ break;
+ }
+ return(1);
+ }
+ /* NOTREACHED */