Large diffs are not rendered by default.

@@ -26,7 +26,6 @@
#ifdef USE_WINSOCK
fpGetNetworkParams_t ares_fpGetNetworkParams = ZERO_NULL;
fpSystemFunction036_t ares_fpSystemFunction036 = ZERO_NULL;
fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL;
#endif

/* library-private global vars with source visibility restricted to this file */
@@ -57,15 +56,6 @@ static int ares_win32_init(void)
return ARES_EADDRGETNETWORKPARAMS;
}

ares_fpGetAdaptersAddresses = (fpGetAdaptersAddresses_t)
GetProcAddress(hnd_iphlpapi, "GetAdaptersAddresses");
if (!ares_fpGetAdaptersAddresses)
{
/* This can happen on clients before WinXP, I don't
think it should be an error, unless we don't want to
support Windows 2000 anymore */
}

/*
* When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036,
* also known as RtlGenRandom, which is the case for Windows versions prior
@@ -3,7 +3,7 @@


/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2004-2011 by Daniel Stenberg
* Copyright (C) 2004-2009 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
@@ -23,18 +23,15 @@
#ifdef USE_WINSOCK

#include <iphlpapi.h>
#include <ares_iphlpapi.h>

typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*);
typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG);
typedef ULONG (WINAPI *fpGetAdaptersAddresses_t) ( ULONG, ULONG, void*, IP_ADAPTER_ADDRESSES*, ULONG* );

/* Forward-declaration of variables defined in ares_library_init.c */
/* that are global and unique instances for whole c-ares library. */

extern fpGetNetworkParams_t ares_fpGetNetworkParams;
extern fpSystemFunction036_t ares_fpSystemFunction036;
extern fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses;

#endif /* USE_WINSOCK */

@@ -1,5 +1,5 @@

/* Copyright (C) 2010-2011 by Daniel Stenberg
/* Copyright (C) 2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
@@ -17,44 +17,13 @@

#include "ares_setup.h"

#ifdef HAVE_ASSERT_H
# include <assert.h>
#endif

#if defined(__INTEL_COMPILER) && defined(__unix__)

#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#endif

#endif /* __INTEL_COMPILER && __unix__ */

#define BUILDING_ARES_NOWARN_C 1

#include "ares_nowarn.h"

#if (SIZEOF_INT == 2)
# define CARES_MASK_SINT 0x7FFF
# define CARES_MASK_UINT 0xFFFF
#elif (SIZEOF_INT == 4)
# define CARES_MASK_SINT 0x7FFFFFFF
# define CARES_MASK_UINT 0xFFFFFFFF
#elif (SIZEOF_INT == 8)
# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFF
# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFF
#elif (SIZEOF_INT == 16)
# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
#endif
#define CARES_MASK_UINT (~(unsigned int) 0)
#define CARES_MASK_SINT (CARES_MASK_UINT >> 1)

/*
** unsigned size_t to signed int
** size_t to signed int
*/

int aresx_uztosi(size_t uznum)
@@ -82,100 +51,9 @@ int aresx_sltosi(long slnum)
# pragma warning(disable:810) /* conversion may lose significant bits */
#endif

DEBUGASSERT(slnum >= 0);
return (int)(slnum & (long) CARES_MASK_SINT);

#ifdef __INTEL_COMPILER
# pragma warning(pop)
#endif
}

/*
** signed ssize_t to signed int
*/

int aresx_sztosi(ssize_t sznum)
{
#ifdef __INTEL_COMPILER
# pragma warning(push)
# pragma warning(disable:810) /* conversion may lose significant bits */
#endif

DEBUGASSERT(sznum >= 0);
return (int)(sznum & (ssize_t) CARES_MASK_SINT);

#ifdef __INTEL_COMPILER
# pragma warning(pop)
#endif
}

/*
** signed ssize_t to unsigned int
*/

unsigned int aresx_sztoui(ssize_t sznum)
{
#ifdef __INTEL_COMPILER
# pragma warning(push)
# pragma warning(disable:810) /* conversion may lose significant bits */
#endif

DEBUGASSERT(sznum >= 0);
return (unsigned int)(sznum & (ssize_t) CARES_MASK_UINT);

#ifdef __INTEL_COMPILER
# pragma warning(pop)
#endif
}

#if defined(__INTEL_COMPILER) && defined(__unix__)

int aresx_FD_ISSET(int fd, fd_set *fdset)
{
#pragma warning(push)
#pragma warning(disable:1469) /* clobber ignored */
return FD_ISSET(fd, fdset);
#pragma warning(pop)
}

void aresx_FD_SET(int fd, fd_set *fdset)
{
#pragma warning(push)
#pragma warning(disable:1469) /* clobber ignored */
FD_SET(fd, fdset);
#pragma warning(pop)
}

void aresx_FD_ZERO(fd_set *fdset)
{
#pragma warning(push)
#pragma warning(disable:593) /* variable was set but never used */
FD_ZERO(fdset);
#pragma warning(pop)
}

unsigned short aresx_htons(unsigned short usnum)
{
#if (__INTEL_COMPILER == 910) && defined(__i386__)
return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
#else
#pragma warning(push)
#pragma warning(disable:810) /* conversion may lose significant bits */
return htons(usnum);
#pragma warning(pop)
#endif
}

unsigned short aresx_ntohs(unsigned short usnum)
{
#if (__INTEL_COMPILER == 910) && defined(__i386__)
return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
#else
#pragma warning(push)
#pragma warning(disable:810) /* conversion may lose significant bits */
return ntohs(usnum);
#pragma warning(pop)
#endif
}

#endif /* __INTEL_COMPILER && __unix__ */
@@ -2,7 +2,7 @@
#define HEADER_CARES_NOWARN_H


/* Copyright (C) 2010-2011 by Daniel Stenberg
/* Copyright (C) 2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
@@ -21,35 +21,4 @@ int aresx_uztosi(size_t uznum);

int aresx_sltosi(long slnum);

int aresx_sztosi(ssize_t sznum);

unsigned int aresx_sztoui(ssize_t sznum);

#if defined(__INTEL_COMPILER) && defined(__unix__)

int aresx_FD_ISSET(int fd, fd_set *fdset);

void aresx_FD_SET(int fd, fd_set *fdset);

void aresx_FD_ZERO(fd_set *fdset);

unsigned short aresx_htons(unsigned short usnum);

unsigned short aresx_ntohs(unsigned short usnum);

#ifndef BUILDING_ARES_NOWARN_C
# undef FD_ISSET
# define FD_ISSET(a,b) aresx_FD_ISSET((a),(b))
# undef FD_SET
# define FD_SET(a,b) aresx_FD_SET((a),(b))
# undef FD_ZERO
# define FD_ZERO(a) aresx_FD_ZERO((a))
# undef htons
# define htons(a) aresx_htons((a))
# undef ntohs
# define ntohs(a) aresx_ntohs((a))
#endif

#endif /* __INTEL_COMPILER && __unix__ */

#endif /* HEADER_CARES_NOWARN_H */
@@ -1,6 +1,6 @@

/* Copyright 1998 by the Massachusetts Institute of Technology.
* Copyright (C) 2008-2011 by Daniel Stenberg
* Copyright (C) 2008-2010 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
@@ -135,10 +135,12 @@ int ares_set_servers(ares_channel channel,
int ares_set_servers_csv(ares_channel channel,
const char* _csv)
{
size_t i;
int i;
char* csv = NULL;
char* ptr;
char* start_host;
long port;
bool found_port;
int rv = ARES_SUCCESS;
struct ares_addr_node *servers = NULL;
struct ares_addr_node *last = NULL;
@@ -163,6 +165,7 @@ int ares_set_servers_csv(ares_channel channel,
}

start_host = csv;
found_port = false;
for (ptr = csv; *ptr; ptr++) {
if (*ptr == ',') {
char* pp = ptr - 1;
@@ -183,8 +186,9 @@ int ares_set_servers_csv(ares_channel channel,
pp--;
}
if ((pp != start_host) && ((pp + 1) < ptr)) {
/* Found it. Parse over the port number */
(void)strtol(pp + 1, NULL, 10);
/* Found it. */
found_port = true;
port = strtol(pp + 1, NULL, 10);
*pp = 0; /* null terminate host */
}
/* resolve host, try ipv4 first, rslt is in network byte order */
@@ -229,6 +233,7 @@ int ares_set_servers_csv(ares_channel channel,
}

/* Set up for next one */
found_port = false;
start_host = ptr + 1;
}
}
@@ -132,7 +132,6 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -150,7 +149,6 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
{
if (aptr + sizeof(struct in_addr) > abuf + alen)
{
free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -161,7 +159,6 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
struct ares_addrttl * const at = &addrttls[naddrs];
if (aptr + sizeof(struct in_addr) > abuf + alen)
{
free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -132,7 +132,6 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -150,7 +149,6 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
{
if (aptr + sizeof(struct ares_in6_addr) > abuf + alen)
{
free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -161,7 +159,6 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
struct ares_addr6ttl * const at = &addrttls[naddrs];
if (aptr + sizeof(struct ares_in6_addr) > abuf + alen)
{
free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -47,7 +47,7 @@

int
ares_parse_mx_reply (const unsigned char *abuf, int alen,
struct ares_mx_reply **mx_out)
struct ares_mx_reply **mx_out)
{
unsigned int qdcount, ancount, i;
const unsigned char *aptr, *vptr;
@@ -134,7 +134,7 @@ ares_parse_mx_reply (const unsigned char *abuf, int alen,
mx_last = mx_curr;

vptr = aptr;
mx_curr->priority = DNS__16BIT(vptr);
mx_curr->priority = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);

status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len);
@@ -1,3 +1,5 @@
/* $Id */

/* Copyright 1998 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
@@ -103,7 +105,6 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen,
if ( aptr + RRFIXEDSZ > abuf + alen )
{
status = ARES_EBADRESP;
free(rr_name);
break;
}
rr_type = DNS_RR_TYPE( aptr );
@@ -118,7 +119,6 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen,
&len);
if ( status != ARES_SUCCESS )
{
free(rr_name);
break;
}

@@ -99,7 +99,6 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
aptr += len;
if (aptr + RRFIXEDSZ > abuf + alen)
{
free(rr_name);
status = ARES_EBADRESP;
break;
}
@@ -115,17 +114,13 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
{
free(rr_name);
break;
}
break;
if (hostname)
free(hostname);
hostname = rr_data;
aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char));
aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char *));
if (!aliases[aliascnt])
{
free(rr_name);
status = ARES_ENOMEM;
break;
}
@@ -136,7 +131,6 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
alias_alloc *= 2;
ptr = realloc(aliases, alias_alloc * sizeof(char *));
if(!ptr) {
free(rr_name);
status = ARES_ENOMEM;
break;
}
@@ -150,10 +144,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
&len);
if (status != ARES_SUCCESS)
{
free(rr_name);
break;
}
break;
free(ptrname);
ptrname = rr_data;
}
@@ -139,11 +139,11 @@ ares_parse_srv_reply (const unsigned char *abuf, int alen,
srv_last = srv_curr;

vptr = aptr;
srv_curr->priority = DNS__16BIT(vptr);
srv_curr->priority = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);
srv_curr->weight = DNS__16BIT(vptr);
srv_curr->weight = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);
srv_curr->port = DNS__16BIT(vptr);
srv_curr->port = ntohs (*((unsigned short *)vptr));
vptr += sizeof(unsigned short);

status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len);

This file was deleted.

@@ -52,6 +52,7 @@

#if defined(WIN32) && !defined(WATT32)

#define IS_NT() ((int)GetVersion() > 0)
#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
#define NAMESERVER "NameServer"
@@ -88,11 +89,6 @@
#include "ares_ipv6.h"
#include "ares_llist.h"

#ifndef HAVE_GETENV
# include "ares_getenv.h"
# define getenv(ptr) ares_getenv(ptr)
#endif

#ifndef HAVE_STRDUP
# include "ares_strdup.h"
# define strdup(ptr) ares_strdup(ptr)
@@ -203,7 +199,7 @@ struct query {
void *arg;

/* Query status */
int try_count; /* Number of times we tried this query already. */
int try; /* Number of times we tried this query already. */
int server; /* Server this query has last been sent to. */
struct query_server_info *server_info; /* per-server state */
int using_tcp;
@@ -63,10 +63,10 @@
#include <stdlib.h>
#include <fcntl.h>
#include <time.h>
#include <errno.h>

#include "ares.h"
#include "ares_dns.h"
#include "ares_nowarn.h"
#include "ares_private.h"


@@ -300,28 +300,29 @@ static void advance_tcp_send_queue(ares_channel channel, int whichserver,
{
struct send_request *sendreq;
struct server_state *server = &channel->servers[whichserver];
while (num_bytes > 0) {
sendreq = server->qhead;
if ((size_t)num_bytes >= sendreq->len) {
num_bytes -= sendreq->len;
server->qhead = sendreq->next;
if (sendreq->data_storage)
free(sendreq->data_storage);
free(sendreq);
if (server->qhead == NULL) {
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
server->qtail = NULL;

/* qhead is NULL so we cannot continue this loop */
break;
}
}
else {
sendreq->data += num_bytes;
sendreq->len -= num_bytes;
num_bytes = 0;
while (num_bytes > 0)
{
sendreq = server->qhead;
if ((size_t)num_bytes >= sendreq->len)
{
num_bytes -= sendreq->len;
server->qhead = sendreq->next;
if (server->qhead == NULL)
{
SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
server->qtail = NULL;
}
if (sendreq->data_storage != NULL)
free(sendreq->data_storage);
free(sendreq);
}
else
{
sendreq->data += num_bytes;
sendreq->len -= num_bytes;
num_bytes = 0;
}
}
}
}

/* If any TCP socket selects true for reading, read some data,
@@ -685,7 +686,7 @@ static void next_server(ares_channel channel, struct query *query,
* servers to try. In total, we need to do channel->nservers * channel->tries
* attempts. Use query->try to remember how many times we already attempted
* this query. Use modular arithmetic to find the next server to try. */
while (++(query->try_count) < (channel->nservers * channel->tries))
while (++(query->try) < (channel->nservers * channel->tries))
{
struct server_state *server;

@@ -790,7 +791,7 @@ void ares__send_query(ares_channel channel, struct query *query,
return;
}
}
timeplus = channel->timeout << (query->try_count / channel->nservers);
timeplus = channel->timeout << (query->try / channel->nservers);
timeplus = (timeplus * (9 + (rand () & 7))) / 16;
query->timeout = *now;
ares__timeadd(&query->timeout,
@@ -20,6 +20,7 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>

#ifdef HAVE_STRINGS_H
# include <strings.h>
@@ -291,7 +292,7 @@ static int single_domain(ares_channel channel, const char *name, char **s)
}
else
{
error = ERRNO;
error = errno;
switch(error)
{
case ENOENT:
@@ -96,7 +96,7 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
query->arg = arg;

/* Initialize query status. */
query->try_count = 0;
query->try = 0;

/* Choose the server to send the query to. If rotation is enabled, keep track
* of the next server we want to use. */
@@ -1,6 +1,7 @@
#ifndef HEADER_CARES_SETUP_H
#define HEADER_CARES_SETUP_H

/* $Id$ */

/* Copyright (C) 2004 - 2009 by Daniel Stenberg et al
*
@@ -30,12 +31,6 @@

#ifdef HAVE_CONFIG_H
#include "ares_config.h"
#else

#ifdef WIN32
#include "config-win32.h"
#endif

#endif /* HAVE_CONFIG_H */

/* ================================================================ */
@@ -75,7 +70,7 @@
/* please, do it beyond the point further indicated in this file. */
/* ================================================================ */

#if 0 /* libuv hack */
#if 0 /* libuv disabled */
/*
* c-ares external interface definitions are also used internally,
* and might also include required system header files to define them.
@@ -88,7 +83,7 @@
*/

#include <ares_rules.h>
#endif /* libuv hack */
#endif

/* ================================================================= */
/* No system header file shall be included in this file before this */
@@ -107,10 +102,6 @@
*/

#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
@@ -121,6 +112,7 @@
# include <winsock.h>
# endif
# endif
# include <windows.h>
#endif

/*
@@ -508,5 +508,3 @@

/* the signed version of size_t */
/* #undef ssize_t */

#define HAVE_GETENV 1
@@ -508,5 +508,3 @@

/* the signed version of size_t */
/* #undef ssize_t */

#define HAVE_GETENV 1
@@ -508,5 +508,3 @@

/* the signed version of size_t */
/* #undef ssize_t */

#define HAVE_GETENV 1
@@ -508,5 +508,3 @@

/* the signed version of size_t */
/* #undef ssize_t */

#define HAVE_GETENV 1
@@ -508,5 +508,3 @@

/* the signed version of size_t */
/* #undef ssize_t */

#define HAVE_GETENV 1
@@ -508,5 +508,3 @@

/* the signed version of size_t */
/* #undef ssize_t */

#define HAVE_GETENV 1
@@ -508,5 +508,3 @@

/* the signed version of size_t */
/* #undef ssize_t */

#define HAVE_GETENV 1
@@ -37,20 +37,20 @@
#endif

#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "ares.h"
#include "ares_ipv6.h"
#include "ares_nowarn.h"
#include "inet_net_pton.h"


const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };


#ifndef HAVE_INET_NET_PTON
#if !defined(HAVE_INET_NET_PTON) || !defined(HAVE_INET_NET_PTON_IPV6)

/*
* static int
@@ -83,17 +83,16 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)

ch = *src++;
if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
&& ISASCII(src[1])
&& ISXDIGIT(src[1])) {
/* Hexadecimal: Eat nybble string. */
if (!size)
goto emsgsize;
dirty = 0;
src++; /* skip x or X. */
while ((ch = *src++) != '\0' && ISASCII(ch) && ISXDIGIT(ch)) {
while ((ch = *src++) != '\0' && ISXDIGIT(ch)) {
if (ISUPPER(ch))
ch = tolower(ch);
n = aresx_sztosi(strchr(xdigits, ch) - xdigits);
n = (int)(strchr(xdigits, ch) - xdigits);
if (dirty == 0)
tmp = n;
else
@@ -110,18 +109,18 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
goto emsgsize;
*dst++ = (unsigned char) (tmp << 4);
}
} else if (ISASCII(ch) && ISDIGIT(ch)) {
} else if (ISDIGIT(ch)) {
/* Decimal: eat dotted digit string. */
for (;;) {
tmp = 0;
do {
n = aresx_sztosi(strchr(digits, ch) - digits);
n = (int)(strchr(digits, ch) - digits);
tmp *= 10;
tmp += n;
if (tmp > 255)
goto enoent;
} while ((ch = *src++) != '\0' &&
ISASCII(ch) && ISDIGIT(ch));
ISDIGIT(ch));
if (!size--)
goto emsgsize;
*dst++ = (unsigned char) tmp;
@@ -130,27 +129,27 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
if (ch != '.')
goto enoent;
ch = *src++;
if (!ISASCII(ch) || !ISDIGIT(ch))
if (!ISDIGIT(ch))
goto enoent;
}
} else
goto enoent;

bits = -1;
if (ch == '/' && ISASCII(src[0]) &&
if (ch == '/' &&
ISDIGIT(src[0]) && dst > odst) {
/* CIDR width specifier. Nothing can follow it. */
ch = *src++; /* Skip over the /. */
bits = 0;
do {
n = aresx_sztosi(strchr(digits, ch) - digits);
n = (int)(strchr(digits, ch) - digits);
bits *= 10;
bits += n;
if (bits > 32)
goto enoent;
} while ((ch = *src++) != '\0' && ISASCII(ch) && ISDIGIT(ch));
} while ((ch = *src++) != '\0' && ISDIGIT(ch));
if (ch != '\0')
goto enoent;
if (bits > 32)
goto emsgsize;
}

/* Firey death and destruction unless we prefetched EOS. */
@@ -174,7 +173,7 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
bits = 8;
/* If imputed mask is narrower than specified octets, widen. */
if (bits < ((dst - odst) * 8))
bits = aresx_sztosi(dst - odst) * 8;
bits = (int)(dst - odst) * 8;
/*
* If there are no additional bits specified for a class D
* address adjust bits to 4.
@@ -217,7 +216,7 @@ getbits(const char *src, int *bitsp)
if (n++ != 0 && val == 0) /* no leading zeros */
return (0);
val *= 10;
val += aresx_sztosi(pch - digits);
val += (pch - digits);
if (val > 128) /* range */
return (0);
continue;
@@ -249,7 +248,7 @@ getv4(const char *src, unsigned char *dst, int *bitsp)
if (n++ != 0 && val == 0) /* no leading zeros */
return (0);
val *= 10;
val += aresx_sztoui(pch - digits);
val += (pch - digits);
if (val > 255) /* range */
return (0);
continue;
@@ -270,8 +269,8 @@ getv4(const char *src, unsigned char *dst, int *bitsp)
return (0);
if (dst - odst > 3) /* too many octets? */
return (0);
*dst = (unsigned char)val;
return 1;
*dst++ = (unsigned char)val;
return (1);
}

static int
@@ -309,7 +308,7 @@ inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
pch = strchr((xdigits = xdigits_u), ch);
if (pch != NULL) {
val <<= 4;
val |= aresx_sztoui(pch - xdigits);
val |= (pch - xdigits);
if (++digits > 4)
goto enoent;
saw_xdigit = 1;
@@ -426,7 +425,7 @@ ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
}
}

#endif /* HAVE_INET_NET_PTON */
#endif

#ifndef HAVE_INET_PTON
int ares_inet_pton(int af, const char *src, void *dst)
@@ -1,7 +1,8 @@
#ifndef HEADER_CARES_INET_NET_PTON_H
#define HEADER_CARES_INET_NET_PTON_H
#ifndef __ARES_INET_NET_PTON_H
#define __ARES_INET_NET_PTON_H

/* Copyright (C) 2005-2010 by Daniel Stenberg et al

/* Copyright (C) 2005 by Daniel Stenberg
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
@@ -21,11 +22,10 @@
#else
int ares_inet_pton(int af, const char *src, void *dst);
#endif

#ifdef HAVE_INET_NET_PTON
#if defined(HAVE_INET_NET_PTON) && defined(HAVE_INET_NET_PTON_IPV6)
#define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z)
#else
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size);
#endif

#endif /* HEADER_CARES_INET_NET_PTON_H */
#endif /* __ARES_INET_NET_PTON_H */
@@ -1,18 +1,18 @@
/*
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1996-1999 by Internet Software Consortium.

/* Copyright (c) 1996 by Internet Software Consortium.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
* SOFTWARE.
*/

#include "ares_setup.h"
@@ -36,6 +36,7 @@
#endif

#include <ctype.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
@@ -47,6 +48,12 @@

#ifndef HAVE_INET_NTOP

#ifdef SPRINTF_CHAR
# define SPRINTF(x) strlen(sprintf/**/x)
#else
# define SPRINTF(x) ((size_t)sprintf x)
#endif

/*
* WARNING: Don't even consider trying to compile this on a system where
* sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
@@ -61,31 +68,32 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
* return:
* pointer to presentation format address (`dst'), or NULL (see errno).
* note:
* On Windows we store the error in the thread errno, not
* in the winsock error code. This is to avoid loosing the
* actual last winsock error. So use macro ERRNO to fetch the
* errno this funtion sets when returning NULL, not SOCKERRNO.
* On Windows we store the error in the thread errno, not
* in the winsock error code. This is to avoid loosing the
* actual last winsock error. So use macro ERRNO to fetch the
* errno this funtion sets when returning NULL, not SOCKERRNO.
* author:
* Paul Vixie, 1996.
*/
const char *
ares_inet_ntop(int af, const void *src, char *dst, size_t size)
{
switch (af) {
case AF_INET:
return (inet_ntop4(src, dst, size));
case AF_INET6:
return (inet_ntop6(src, dst, size));
default:
SET_ERRNO(EAFNOSUPPORT);
return (NULL);
}
switch (af)
{
case AF_INET:
return (inet_ntop4(src, dst, size));
case AF_INET6:
return (inet_ntop6(src, dst, size));
default:
SET_ERRNO(EAFNOSUPPORT);
return (NULL);
}
/* NOTREACHED */
}

/* const char *
* inet_ntop4(src, dst, size)
* format an IPv4 address
* format an IPv4 address, more or less like inet_ntoa()
* return:
* `dst' (as a const)
* notes:
@@ -98,21 +106,22 @@ static const char *
inet_ntop4(const unsigned char *src, char *dst, size_t size)
{
static const char fmt[] = "%u.%u.%u.%u";
char tmp[sizeof("255.255.255.255")];
char tmp[sizeof "255.255.255.255"];

if ((size_t)sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) >= size) {
SET_ERRNO(ENOSPC);
return (NULL);
}
strcpy(dst, tmp);
return (dst);
if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size)
{
SET_ERRNO(ENOSPC);
return (NULL);
}
strcpy(dst, tmp);
return (dst);
}

/* const char *
* inet_ntop6(src, dst, size)
* convert IPv6 binary address into presentation (printable) format
* convert IPv6 binary address into presentation (printable) format
* author:
* Paul Vixie, 1996.
* Paul Vixie, 1996.
*/
static const char *
inet_ntop6(const unsigned char *src, char *dst, size_t size)
@@ -126,8 +135,11 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
*/
char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
char *tp;
struct { int base, len; } best, cur;
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
struct {
long base;
long len;
} best, cur;
unsigned long words[NS_IN6ADDRSZ / NS_INT16SZ];
int i;

/*
@@ -137,72 +149,84 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
*/
memset(words, '\0', sizeof(words));
for (i = 0; i < NS_IN6ADDRSZ; i++)
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));

best.base = -1;
best.len = 0;
cur.base = -1;
best.len = 0;
cur.len = 0;
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
if (words[i] == 0) {
if (cur.base == -1)
cur.base = i, cur.len = 1;

for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
{
if (words[i] == 0)
{
if (cur.base == -1)
cur.base = i, cur.len = 1;
else
cur.len++;
}
else
cur.len++;
} else {
if (cur.base != -1) {
if (best.base == -1 || cur.len > best.len)
best = cur;
cur.base = -1;
}
{
if (cur.base != -1)
{
if (best.base == -1 || cur.len > best.len)
best = cur;
cur.base = -1;
}
}
}
if (cur.base != -1)
{
if (best.base == -1 || cur.len > best.len)
best = cur;
}
}
if (cur.base != -1) {
if (best.base == -1 || cur.len > best.len)
best = cur;
}
if (best.base != -1 && best.len < 2)
best.base = -1;

/*
* Format the result.
*/
tp = tmp;
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
/* Are we inside the best run of 0x00's? */
if (best.base != -1 && i >= best.base &&
i < (best.base + best.len)) {
if (i == best.base)
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++)
{
/* Are we inside the best run of 0x00's? */
if (best.base != -1 && i >= best.base &&
i < (best.base + best.len))
{
if (i == best.base)
*tp++ = ':';
continue;
}
/* Are we following an initial run of 0x00s or any real hex? */
if (i != 0)
*tp++ = ':';
continue;
/* Is this address an encapsulated IPv4? */
if (i == 6 && best.base == 0 &&
(best.len == 6 || (best.len == 5 && words[5] == 0xffff)))
{
if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
return (NULL);
tp += strlen(tp);
break;
}
tp += SPRINTF((tp, "%lx", words[i]));
}
/* Are we following an initial run of 0x00s or any real hex? */
if (i != 0)
*tp++ = ':';
/* Is this address an encapsulated IPv4? */
if (i == 6 && best.base == 0 && (best.len == 6 ||
(best.len == 7 && words[7] != 0x0001) ||
(best.len == 5 && words[5] == 0xffff))) {
if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
return (NULL);
tp += strlen(tp);
break;
}
tp += sprintf(tp, "%x", words[i]);
}

/* Was it a trailing run of 0x00's? */
if (best.base != -1 && (best.base + best.len) ==
(NS_IN6ADDRSZ / NS_INT16SZ))
if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
*tp++ = ':';
*tp++ = '\0';

/*
* Check for overflow, copy, and we're done.
*/
if ((size_t)(tp - tmp) > size) {
SET_ERRNO(ENOSPC);
return (NULL);
}
if ((size_t)(tp - tmp) > size)
{
SET_ERRNO(ENOSPC);
return (NULL);
}
strcpy(dst, tmp);
return (dst);
}
#endif

@@ -18,6 +18,7 @@
*/

#ifdef HAVE_INET_NTOP
#include <arpa/inet.h>
#define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z)
#else
const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size);
@@ -75,11 +75,6 @@ typedef enum __ns_type {
ns_t_sink = 40, /* Kitchen sink (experimentatl) */
ns_t_opt = 41, /* EDNS0 option (meta-RR) */
ns_t_apl = 42, /* Address prefix list (RFC3123) */
ns_t_ds = 43, /* Delegation Signer (RFC4034) */
ns_t_sshfp = 44, /* SSH Key Fingerprint (RFC4255) */
ns_t_rrsig = 46, /* Resource Record Signature (RFC4034) */
ns_t_nsec = 47, /* Next Secure (RFC4034) */
ns_t_dnskey = 48, /* DNS Public Key (RFC4034) */
ns_t_tkey = 249, /* Transaction key */
ns_t_tsig = 250, /* Transaction signature. */
ns_t_ixfr = 251, /* Incremental zone transfer. */
@@ -186,11 +181,6 @@ typedef enum __ns_rcode {
#define T_SRV ns_t_srv
#define T_ATMA ns_t_atma
#define T_NAPTR ns_t_naptr
#define T_DS ns_t_ds
#define T_SSHFP ns_t_sshfp
#define T_RRSIG ns_t_rrsig
#define T_NSEC ns_t_nsec
#define T_DNSKEY ns_t_dnskey
#define T_TSIG ns_t_tsig
#define T_IXFR ns_t_ixfr
#define T_AXFR ns_t_axfr
@@ -2,7 +2,7 @@
#define __SETUP_ONCE_H


/* Copyright (C) 2004 - 2011 by Daniel Stenberg et al
/* Copyright (C) 2004 - 2010 by Daniel Stenberg et al
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
@@ -35,10 +35,7 @@
#include <string.h>
#include <stdarg.h>
#include <ctype.h>

#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif

#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
@@ -251,7 +248,6 @@ struct timeval {
#define ISPRINT(x) (isprint((int) ((unsigned char)x)))
#define ISUPPER(x) (isupper((int) ((unsigned char)x)))
#define ISLOWER(x) (islower((int) ((unsigned char)x)))
#define ISASCII(x) (isascii((int) ((unsigned char)x)))

#define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \
(((unsigned char)x) == '\t'))
@@ -370,7 +366,7 @@ typedef int sig_atomic_t;
* (or equivalent) on this platform to hide platform details to code using it.
*/

#if defined(WIN32) && !defined(WATT32)
#ifdef WIN32
#define ERRNO ((int)GetLastError())
#define SET_ERRNO(x) (SetLastError((DWORD)(x)))
#else
@@ -459,18 +455,6 @@ typedef int sig_atomic_t;
#endif


/*
* System error codes for Windows CE
*/

#if defined(WIN32) && !defined(HAVE_ERRNO_H)
#define ENOENT ERROR_FILE_NOT_FOUND
#define ESRCH ERROR_PATH_NOT_FOUND
#define ENOMEM ERROR_NOT_ENOUGH_MEMORY
#define ENOSPC ERROR_INVALID_PARAMETER
#endif


/*
* Actually use __32_getpwuid() on 64-bit VMS builds for getpwuid()
*/
@@ -26,10 +26,6 @@
#include <stddef.h> /* NULL */
#include <string.h> /* memset */

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

/* use inet_pton from c-ares if necessary */
#include "ares_config.h"
#include "ares/inet_net_pton.h"
14 uv.gyp
@@ -21,8 +21,11 @@
'include/uv.h',
'src/uv-common.c',
'src/uv-common.h',
'src/ares/ares_cancel.c',
'src/ares/ares__close_sockets.c',
'src/ares/ares__get_hostent.c',
'src/ares/ares__read_line.c',
'src/ares/ares__timeval.c',
'src/ares/ares_cancel.c',
'src/ares/ares_data.c',
'src/ares/ares_data.h',
'src/ares/ares_destroy.c',
@@ -32,10 +35,8 @@
'src/ares/ares_fds.c',
'src/ares/ares_free_hostent.c',
'src/ares/ares_free_string.c',
'src/ares/ares_getenv.h',
'src/ares/ares_gethostbyaddr.c',
'src/ares/ares_gethostbyname.c',
'src/ares/ares__get_hostent.c',
'src/ares/ares_getnameinfo.c',
'src/ares/ares_getopt.c',
'src/ares/ares_getopt.h',
@@ -50,18 +51,16 @@
'src/ares/ares_nowarn.c',
'src/ares/ares_nowarn.h',
'src/ares/ares_options.c',
'src/ares/ares_parse_aaaa_reply.c',
'src/ares/ares_parse_a_reply.c',
'src/ares/ares_parse_aaaa_reply.c',
'src/ares/ares_parse_mx_reply.c',
'src/ares/ares_parse_ns_reply.c',
'src/ares/ares_parse_ptr_reply.c',
'src/ares/ares_parse_srv_reply.c',
'src/ares/ares_parse_txt_reply.c',
'src/ares/ares_platform.h',
'src/ares/ares_private.h',
'src/ares/ares_process.c',
'src/ares/ares_query.c',
'src/ares/ares__read_line.c',
'src/ares/ares_rules.h',
'src/ares/ares_search.c',
'src/ares/ares_send.c',
@@ -72,7 +71,6 @@
'src/ares/ares_strdup.h',
'src/ares/ares_strerror.c',
'src/ares/ares_timeout.c',
'src/ares/ares__timeval.c',
'src/ares/ares_version.c',
'src/ares/ares_writev.c',
'src/ares/ares_writev.h',
@@ -84,7 +82,6 @@
'src/ares/inet_ntop.h',
'src/ares/nameser.h',
'src/ares/setup_once.h',
'src/ares/windows_port.c',
],
'conditions': [
[ 'OS=="win"', {
@@ -101,7 +98,6 @@
'include/uv-private/uv-win.h',
'src/ares/config_win32/ares_config.h',
'src/ares/windows_port.c',
'src/ares/ares_getenv.c',
'src/win/async.c',
'src/win/cares.c',
'src/win/core.c',