room_left -= (strlen (first_unused) + 1); first_unused += strlen (first_unused) + 1;
len = strlen (first_unused); room_left -= (len + 1); first_unused += (len + 1);
_nss_nisplus_parse_grent (nis_result *result, u_long entry, struct group *gr,			  char *buffer, size_t buflen, int *errnop){  char *first_unused = buffer;  size_t room_left = buflen;  char *line;  int count;  if (result == NULL)    return 0;  if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS)      || __type_of(result->objects.objects_val) != NIS_ENTRY_OBJ      || strcmp (result->objects.objects_val[entry].EN_data.en_type,		 "group_tbl") != 0      || result->objects.objects_val[entry].EN_data.en_cols.en_cols_len < 4)    return 0;  if (NISENTRYLEN (entry, 0, result) >= room_left)    {      /* The line is too long for our buffer.  */    no_more_room:      *errnop = ERANGE;      return -1;    }  strncpy (first_unused, NISENTRYVAL (entry, 0, result),	   NISENTRYLEN (entry, 0, result));  first_unused[NISENTRYLEN (entry, 0, result)] = '\0';  gr->gr_name = first_unused;  room_left -= (strlen (first_unused) + 1);  first_unused += strlen (first_unused) + 1;  if (NISENTRYLEN (entry, 1, result) >= room_left)    goto no_more_room;  strncpy (first_unused, NISENTRYVAL (entry, 1, result),	   NISENTRYLEN (entry, 1, result));  first_unused[NISENTRYLEN (entry, 1, result)] = '\0';  gr->gr_passwd = first_unused;  room_left -= (strlen (first_unused) + 1);  first_unused += strlen (first_unused) + 1;  if (NISENTRYLEN (entry, 2, result) >= room_left)    goto no_more_room;  strncpy (first_unused, NISENTRYVAL (entry, 2, result),	   NISENTRYLEN (entry, 2, result));  first_unused[NISENTRYLEN (entry, 2, result)] = '\0';  gr->gr_gid = atoi (first_unused);  room_left -= (strlen (first_unused) + 1);  first_unused += strlen (first_unused) + 1;  if (NISENTRYLEN (entry, 3, result) >= room_left)    goto no_more_room;  strncpy (first_unused, NISENTRYVAL (entry, 3, result),	   NISENTRYLEN (entry, 3, result));  first_unused[NISENTRYLEN (entry, 3, result)] = '\0';  line = first_unused;  room_left -= (strlen (line) + 1);  first_unused += strlen (line) + 1;  /* Adjust the pointer so it is aligned for     storing pointers.  */  first_unused += __alignof__ (char *) - 1;  first_unused -= ((first_unused - (char *) 0) % __alignof__ (char *));  gr->gr_mem = (char **) first_unused;  count = 0;  while (*line != '\0')    {      /* Skip leading blanks.  */      while (isspace (*line))	++line;      if (*line == '\0')	break;      if (room_left < sizeof (char *))	  goto no_more_room;      room_left -= sizeof (char *);      gr->gr_mem[count] = line;      while (*line != '\0' && *line != ',' && !isspace (*line))	++line;      if (*line == ',' || isspace (*line))	{	  int is = isspace (*line);	  *line = '\0';	  if (is)	    while (*line != '\0' && (*line == ',' || isspace (*line)))	      ++line;	  else	    ++line;	  ++count;	}      else	gr->gr_mem[count+1] = NULL;    }  if (room_left < sizeof (char *))      goto no_more_room;  room_left -= sizeof (char *);  gr->gr_mem[count] = NULL;  return 1;}