|
@@ -628,13 +628,20 @@ gaih_inet(const char *name, const struct gaih_service *service,
|
|
|
char buffer[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
|
|
|
|
|
|
while (at2 != NULL) {
|
|
|
- if (req->ai_flags & AI_CANONNAME) {
|
|
|
+ c = inet_ntop(at2->family, at2->addr, buffer, sizeof(buffer));
|
|
|
+ if (c) {
|
|
|
+ namelen = strlen(c) + 1;
|
|
|
+ } else if (req->ai_flags & AI_CANONNAME) {
|
|
|
struct hostent *h = NULL;
|
|
|
int herrno;
|
|
|
struct hostent th;
|
|
|
size_t tmpbuflen = 512;
|
|
|
char *tmpbuf;
|
|
|
|
|
|
+ /* Hint says numeric, but address is not */
|
|
|
+ if (req->ai_flags & AI_NUMERICHOST)
|
|
|
+ return -EAI_NONAME;
|
|
|
+
|
|
|
do {
|
|
|
tmpbuflen *= 2;
|
|
|
tmpbuf = alloca(tmpbuflen);
|
|
@@ -656,9 +663,7 @@ gaih_inet(const char *name, const struct gaih_service *service,
|
|
|
return -EAI_SYSTEM;
|
|
|
}
|
|
|
|
|
|
- if (h == NULL)
|
|
|
- c = inet_ntop(at2->family, at2->addr, buffer, sizeof(buffer));
|
|
|
- else
|
|
|
+ if (h != NULL)
|
|
|
c = h->h_name;
|
|
|
|
|
|
if (c == NULL)
|