xref: /plan9/sys/src/ape/lib/bsd/gethostbyaddr.c (revision 781103c4074deb8af160e8a0da2742ba6b29dc2b)
1219b2ee8SDavid du Colombier /* posix */
2219b2ee8SDavid du Colombier #include <sys/types.h>
3219b2ee8SDavid du Colombier #include <unistd.h>
4219b2ee8SDavid du Colombier 
5219b2ee8SDavid du Colombier /* bsd extensions */
6219b2ee8SDavid du Colombier #include <sys/uio.h>
7219b2ee8SDavid du Colombier #include <sys/socket.h>
8219b2ee8SDavid du Colombier #include <netinet/in.h>
9219b2ee8SDavid du Colombier #include <netdb.h>
10219b2ee8SDavid du Colombier 
11219b2ee8SDavid du Colombier int h_errno;
12219b2ee8SDavid du Colombier 
13219b2ee8SDavid du Colombier struct hostent*
gethostbyaddr(void * addr,int len,int type)1480ee5cbfSDavid du Colombier gethostbyaddr(void *addr, int len, int type)
15219b2ee8SDavid du Colombier {
16*781103c4SDavid du Colombier 	unsigned long y;
17219b2ee8SDavid du Colombier 	struct in_addr x;
1880ee5cbfSDavid du Colombier 	unsigned char *p = addr;
19219b2ee8SDavid du Colombier 
2080ee5cbfSDavid du Colombier 	if(type != AF_INET || len != 4){
21219b2ee8SDavid du Colombier 		h_errno = NO_RECOVERY;
22219b2ee8SDavid du Colombier 		return 0;
23219b2ee8SDavid du Colombier 	}
24219b2ee8SDavid du Colombier 
2580ee5cbfSDavid du Colombier 	y = (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3];
2680ee5cbfSDavid du Colombier 	x.s_addr = htonl(y);
27219b2ee8SDavid du Colombier 
28219b2ee8SDavid du Colombier 	return gethostbyname(inet_ntoa(x));
29219b2ee8SDavid du Colombier }
30