parse_res = _nss_files_parse_spent (p, sp, data, buflen); if (!parse_res && errno == ERANGE) return NSS_STATUS_TRYAGAIN;
if ((parse_res = _nss_files_parse_spent (p, sp, data, buflen)) == -1) { free (outkey); return NSS_STATUS_TRYAGAIN; }
internal_nis_getspent_r (struct spwd *sp, char *buffer, size_t buflen){  struct parser_data *data = (void *) buffer;  char *domain, *result, *outkey;  int len, keylen, parse_res;  if (yp_get_default_domain (&domain))    return NSS_STATUS_UNAVAIL;  /* Get the next entry until we found a correct one. */  do    {      enum nss_status retval;      char *p;      if (new_start)        retval = yperr2nss (yp_first (domain, "shadow.byname",                                      &outkey, &keylen, &result, &len));      else        retval = yperr2nss ( yp_next (domain, "shadow.byname",                                      oldkey, oldkeylen,                                      &outkey, &keylen, &result, &len));      if (retval != NSS_STATUS_SUCCESS)        {          if (retval == NSS_STATUS_TRYAGAIN)            __set_errno (EAGAIN);          return retval;        }      if ((size_t) (len + 1) > buflen)        {          free (result);          __set_errno (ERANGE);          return NSS_STATUS_TRYAGAIN;        }      p = strncpy (buffer, result, len);      buffer[len] = '\0';      while (isspace (*p))        ++p;      free (result);      parse_res = _nss_files_parse_spent (p, sp, data, buflen);      if (!parse_res && errno == ERANGE)        return NSS_STATUS_TRYAGAIN;      free (oldkey);      oldkey = outkey;      oldkeylen = keylen;      new_start = 0;    }  while (!parse_res);  return NSS_STATUS_SUCCESS;}