
#include "V.h"
/*
* Debug wrapper for the gethostbyname() library  routine.   Note  that
* we've  shortened  this  function's  name, due to truncations in some
* Unix archives and on Sys/V systems with their silly 14-byte limit.
*
* Name
*   gethostent, gethostbyaddr, gethostbyname, sethostent, endhostent -
*   get hosts entry
*
* Syntax
*   #include <netdb.h>
*
*   struct hostent *gethostent()
*
*   struct hostent *gethostbyname(name)
*   char *name;
*
*   struct hostent *gethostbyaddr(addr, len, type)
*   char *addr; int len, type;
*
*   void sethostent(stayopen)
*   int stayopen;
*
*   void endhostent()
*
* Description
*   The  gethostent,  gethostbyname,  and  gethostbyaddr   subroutines
*   return  a  pointer  to  an  object  with  the  following structure
*   containing the broken-out fields reflecting  information  obtained
*   from the hosts database.
*
*   struct hostent {
*      char   *h_name;       -- official name of host
*      char   **h_aliases;   -- alias list
*      int    h_addrtype;    -- address type
*      int    h_length;      -- length of address
*      char   **h_addr_list; -- list of addresses from name server
*   #define  h_addr h_addr_list[0] -- for backward compatibility
*   };
*
*   The members of this structure are:
*
*   h_name      Official name of the host.
*
*   h_aliases   A zero terminated array of alternate names for the host.
*
*   h_addrtype  The type of address being returned; currently always
*               AF_INET.
*
*   h_length    The length, in bytes, of the address.
*
*   h_addr      A pointer to the network address for the host.  Host
*               addresses are returned in network byte order.
*
*   If the stayopen flag on a sethostent subroutine is NULL, the hosts
*   database  is  opened.   Otherwise the sethostent has the effect of
*   rewinding the hosts database.  The endhostent  may  be  called  to
*   close the hosts database when processing is complete.
*
*   The  gethostent  subroutine  simply  reads  the  next  line  while
*   gethostbyname and gethostbyaddr search until a matching  name,  or
*   addr,  len,  type  is  found  (or  until EOF is encountered).  The
*   gethostent subroutine keeps a pointer in  the  database,  allowing
*   successive calls to be used to search the entire file.
*
*   The  gethostbyname  and  gethostbyaddr subroutines query the hosts
*   database.
*
*   A call to sethostent must  be  made  before  a  while  loop  using
*   gethostent  in  order  to perform initialization and an endhostent
*   must be used after the loop.  Both gethostbyname and gethostbyaddr
*   make calls to sethostent and endhostent.
*
* Problems
*   All information is contained in a static area so it must be copied
*   if  it  is  to  be  saved.   Only  the  Internet address format is
*   currently understood.
*
*   If YP is running, gethostent does not return the  entries  in  any
*   particular  order.   See the Guide to the Yellow Pages Service for
*   setup information.
*
*   The hosts database may also be  distributed  via  the  BIND/Hesiod
*   naming service.  See the Guide to the BIND/Hesiod Service for more
*   information.
*
* Return Values
*   Null pointer (0) returned on EOF or error.
*
* Files
*   /etc/hosts
*
* See Also
*   hosts(5), svc.conf(5)
*   Guide to the BIND/Hesiod Service
*   Guide to the Yellow Pages Service
*/
extern struct hostent *gethostbyname();

struct hostent* d_ghbn(name)
	char *name;
{	struct hostent *v;
	int   e=errno;


	v = (struct hostent *)gethostbyname(name);
	if (!v) e = errno;
	V6 "gethostbyname(%08X=%s)=%08lX [Err %d=%s=%s]",name,Dsps(name,-1),v,Errinfo V;
	if (Vlvl>4 && v)	dumphostent(v);
	errno = e;
	return(v);
}
