*errnop = errno; H_ERRNO_SET (NETDB_INTERNAL); return status;
status = internal_setent (DBFILE, &db); if (status != NSS_STATUS_SUCCESS) { *errnop = errno; H_ERRNO_SET (NETDB_INTERNAL); return status; }
lookup (DBT *key, struct STRUCTURE *result,	void *buffer, size_t buflen, int *errnop H_ERRNO_PROTO EXTRA_ARGS_DECL){  char *p;  enum nss_status status;  int err;  DBT value;  /* Open the database.  */  status = internal_setent (keep_db);  if (status != NSS_STATUS_SUCCESS)    {      *errnop = errno;      H_ERRNO_SET (NETDB_INTERNAL);      return status;    }  /* Succeed iff it matches a value that parses correctly.  */  value.flags = 0;  err = db->get (db, NULL, key, &value, 0);  if (err != 0)    {      if (err == DB_NOTFOUND)	{	  H_ERRNO_SET (HOST_NOT_FOUND);	  status = NSS_STATUS_NOTFOUND;	}      else	{	  *errnop = err;	  H_ERRNO_SET (NETDB_INTERNAL);	  status = NSS_STATUS_UNAVAIL;	}    }  else if (buflen < value.size)    {      /* No room to copy the data to.  */      *errnop = ERANGE;      H_ERRNO_SET (NETDB_INTERNAL);      status = NSS_STATUS_TRYAGAIN;    }  else    {      /* Copy the result to a safe place.  */      p = (char *) memcpy (buffer, value.data, value.size);      /* Skip leading blanks.  */      while (isspace (*p))	++p;      err = parse_line (p, result, buffer, buflen, errnop EXTRA_ARGS);      if (err == 0)	{	  /* If the key begins with '0' we are trying to get the next	     entry.  We want to ignore unparsable lines in this case.  */	  if (((char *) key->data)[0] == '0')	    {	      /* Super magical return value.  We need to tell our caller		 that it should continue looping.  This value cannot		 happen in other cases.  */	      status = NSS_STATUS_RETURN;	    }	  else	    {	      H_ERRNO_SET (HOST_NOT_FOUND);	      status = NSS_STATUS_NOTFOUND;	    }	}      else if (err < 0)	{	  H_ERRNO_SET (NETDB_INTERNAL);	  status = NSS_STATUS_TRYAGAIN;	}      else	status = NSS_STATUS_SUCCESS;    }  if (! keep_db)    internal_endent ();  return status;}