/* Host name resolution and matching.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
- 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is part of GNU Wget.
shall include the source code for the parts of OpenSSL used as well
as that of the covered work. */
-#define USE_GNULIB_ALLOC
-
#include "wget.h"
#include <stdio.h>
#include <assert.h>
#ifndef WINDOWS
+# include <sys/types.h>
# include <sys/socket.h>
# include <netinet/in.h>
# ifndef __BEOS__
# include <arpa/inet.h>
# endif
-# include <netdb.h>
+# ifdef __VMS
+# include "vms_ip.h"
+# else /* def __VMS */
+# include <netdb.h>
+# endif /* def __VMS [else] */
# define SET_H_ERRNO(err) ((void)(h_errno = (err)))
#else /* WINDOWS */
# define SET_H_ERRNO(err) WSASetLastError (err)
# define NO_ADDRESS NO_DATA
#endif
+#if !HAVE_DECL_H_ERRNO
+extern int h_errno;
+#endif
+
+
/* Lists of IP addresses that result from running DNS queries. See
lookup_host for details. */
ip = al->addresses;
for (ptr = ai; ptr != NULL; ptr = ptr->ai_next)
- if (ptr->ai_family == AF_INET6)
+ if (ptr->ai_family == AF_INET6)
{
const struct sockaddr_in6 *sin6 =
(const struct sockaddr_in6 *)ptr->ai_addr;
ip->ipv6_scope = sin6->sin6_scope_id;
#endif
++ip;
- }
+ }
else if (ptr->ai_family == AF_INET)
{
const struct sockaddr_in *sin =
}
if (octets < 4)
return false;
-
+
return true;
}
if (str == end)
return false;
-
+
/* Leading :: requires some special handling. */
if (*str == ':')
{
saw_xdigit = false;
break;
}
-
+
return false;
}
if (saw_xdigit)
{
- if (tp > ns_in6addrsz - ns_int16sz)
+ if (tp > ns_in6addrsz - ns_int16sz)
return false;
tp += ns_int16sz;
}
if (colonp != NULL)
{
- if (tp == ns_in6addrsz)
+ if (tp == ns_in6addrsz)
return false;
tp = ns_in6addrsz;
}
/* No luck with the cache; resolve HOST. */
if (!silent && !numeric_address)
- logprintf (LOG_VERBOSE, _("Resolving %s... "), escnonprint (host));
+ {
+ char *str = NULL, *name;
+
+ if (opt.enable_iri && (name = idn_decode ((char *) host)) != NULL)
+ {
+ int len = strlen (host) + strlen (name) + 4;
+ str = xmalloc (len);
+ snprintf (str, len, "%s (%s)", name, host);
+ str[len-1] = '\0';
+ xfree (name);
+ }
+
+ logprintf (LOG_VERBOSE, _("Resolving %s... "),
+ quotearg_style (escape_quoting_style, str ? str : host));
+
+ if (str)
+ xfree (str);
+ }
#ifdef ENABLE_IPV6
{