xref: /plan9/sys/src/ape/lib/bsd/gethostbyaddr.c (revision 80ee5cbfe36716af62da8896207e9763b8e3d760)
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*
14*80ee5cbfSDavid du Colombier gethostbyaddr(void *addr, int len, int type)
15219b2ee8SDavid du Colombier {
16*80ee5cbfSDavid du Colombier 	unsigned long a, y;
17219b2ee8SDavid du Colombier 	struct in_addr x;
18*80ee5cbfSDavid du Colombier 	unsigned char *p = addr;
19219b2ee8SDavid du Colombier 
20*80ee5cbfSDavid 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 
25*80ee5cbfSDavid du Colombier 	y = (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3];
26*80ee5cbfSDavid du Colombier 	x.s_addr = htonl(y);
27219b2ee8SDavid du Colombier 
28219b2ee8SDavid du Colombier 	return gethostbyname(inet_ntoa(x));
29219b2ee8SDavid du Colombier }
30