19 #ifdef HAVE_NETINET_IN_H
20 # include <netinet/in.h>
38 int addrlen,
int family,
struct hostent **host)
40 unsigned int qdcount, ancount;
41 int status,
i, rr_type, rr_class, rr_len;
43 const unsigned char *aptr;
44 char *ptrname, *hostname, *rr_name, *rr_data;
45 struct hostent *hostent = NULL;
78 aliases =
ares_malloc(alias_alloc *
sizeof(
char *));
84 for (
i = 0;
i < (
int)ancount;
i++)
101 if (aptr + rr_len > abuf + alen)
122 rr_data_len = strlen(rr_data)+1;
123 aliases[aliascnt] =
ares_malloc(rr_data_len *
sizeof(
char));
124 if (!aliases[aliascnt])
130 strncpy(aliases[aliascnt], rr_data, rr_data_len);
132 if (aliascnt >= alias_alloc) {
161 if (aptr > abuf + alen)
181 memset(hostent, 0,
sizeof(*hostent));
183 hostent->h_addr_list =
ares_malloc(2 *
sizeof(
char *));
184 if (!hostent->h_addr_list)
188 if (
addr && addrlen) {
190 if (!hostent->h_addr_list[0])
193 hostent->h_addr_list[0] = NULL;
196 hostent->h_aliases =
ares_malloc((aliascnt+1) *
sizeof (
char *));
197 if (!hostent->h_aliases)
201 hostent->h_name = hostname;
202 for (
i=0 ;
i<aliascnt ;
i++)
203 hostent->h_aliases[
i] = aliases[
i];
204 hostent->h_aliases[aliascnt] = NULL;
208 memcpy(hostent->h_addr_list[0],
addr, addrlen);
209 hostent->h_addr_list[1] = NULL;
220 for (
i=0 ;
i<aliascnt ;
i++)