diff --git a/ares/CHANGES b/ares/CHANGES index 3fe0cf836..67b3fbb73 100644 --- a/ares/CHANGES +++ b/ares/CHANGES @@ -1,5 +1,8 @@ Changelog for the c-ares project +* May 2 2009 (Yang Tse) +- Use a build-time configured ares_socklen_t data type instead of socklen_t. + * April 21 2009 (Yang Tse) - Moved potential inclusion of system's malloc.h and memory.h header files to setup_once.h. Inclusion of each header file is based on the definition of diff --git a/ares/Makefile.dj b/ares/Makefile.dj index af6a3ba91..db56e0950 100644 --- a/ares/Makefile.dj +++ b/ares/Makefile.dj @@ -23,7 +23,7 @@ CFLAGS += -DWATT32 -DHAVE_AF_INET6 -DHAVE_PF_INET6 -DHAVE_IOCTLSOCKET \ -DRECV_TYPE_ARG1='int' -DRECV_TYPE_ARG2='void*' \ -DRECV_TYPE_ARG3='int' -DRECV_TYPE_ARG4='int' \ -DRECV_TYPE_RETV='int' -DHAVE_STRUCT_TIMEVAL \ - -Dselect=select_s -Dsocklen_t=int -UHAVE_CONFIG_H \ + -Dselect=select_s -UHAVE_CONFIG_H \ -DRECVFROM_TYPE_ARG1='int' -DRECVFROM_TYPE_ARG2='void' \ -DRECVFROM_TYPE_ARG3='int' -DRECVFROM_TYPE_ARG4='int' \ -DRECVFROM_TYPE_ARG6='int' -DRECVFROM_TYPE_RETV='int' \ diff --git a/ares/Makefile.netware b/ares/Makefile.netware index 71cb242f5..a58528d99 100644 --- a/ares/Makefile.netware +++ b/ares/Makefile.netware @@ -303,7 +303,6 @@ ifeq ($(LIBARCH),CLIB) @echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@ @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@ @echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@ - @echo $(DL)#define socklen_t int$(DL) >> $@ else @echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@ @echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@ @@ -407,9 +406,6 @@ endif @echo $(DL)#else$(DL) >> $@ @echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@ @echo $(DL)#endif$(DL) >> $@ -ifdef OLD_NOVELLSDK - @echo $(DL)#define socklen_t int$(DL) >> $@ -endif FORCE: ; diff --git a/ares/RELEASE-NOTES b/ares/RELEASE-NOTES index 93760e5b4..692b38224 100644 --- a/ares/RELEASE-NOTES +++ b/ares/RELEASE-NOTES @@ -4,8 +4,9 @@ Changed: o in6_addr is not used in ares.h anymore, but a private ares_in6_addr is instead declared and used - p ares_gethostbyname() now supports 'AF_UNSPEC' as a family for resolving + o ares_gethostbyname() now supports 'AF_UNSPEC' as a family for resolving either AF_INET6 or AF_INET + o a build-time configured ares_socklen_t is now used instead of socklen_t Fixed: diff --git a/ares/acinclude.m4 b/ares/acinclude.m4 index e5d96b25f..cf6383a33 100644 --- a/ares/acinclude.m4 +++ b/ares/acinclude.m4 @@ -450,94 +450,6 @@ AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [ ]) -dnl CURL_CHECK_TYPE_SOCKLEN_T -dnl ------------------------------------------------- -dnl Check for existing socklen_t type, and provide -dnl an equivalent type if socklen_t not available - -AC_DEFUN([CURL_CHECK_TYPE_SOCKLEN_T], [ - AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl - AC_CHECK_TYPE([socklen_t], ,[ - dnl socklen_t not available - AC_CACHE_CHECK([for socklen_t equivalent], - [curl_cv_socklen_t_equiv], [ - curl_cv_socklen_t_equiv="unknown" - for arg1 in 'int' 'SOCKET'; do - for arg2 in "struct sockaddr" void; do - for t in int size_t unsigned long "unsigned long"; do - if test "$curl_cv_socklen_t_equiv" = "unknown"; then - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ -#undef inline -#ifdef HAVE_WINDOWS_H -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#ifdef HAVE_WINSOCK2_H -#include -#else -#ifdef HAVE_WINSOCK_H -#include -#endif -#endif -#define GETPEERNCALLCONV PASCAL -#else -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#define GETPEERNCALLCONV -#endif - extern int GETPEERNCALLCONV getpeername($arg1, $arg2 *, $t *); - ]],[[ - $t len=0; - getpeername(0,0,&len); - ]]) - ],[ - curl_cv_socklen_t_equiv="$t" - ]) - fi - done - done - done - ]) - case "$curl_cv_socklen_t_equiv" in - unknown) - AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) - ;; - *) - AC_DEFINE_UNQUOTED(socklen_t, $curl_cv_socklen_t_equiv, - [Type to use in place of socklen_t when system does not provide it.]) - ;; - esac - ],[ -#undef inline -#ifdef HAVE_WINDOWS_H -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#ifdef HAVE_WINSOCK2_H -#include -#ifdef HAVE_WS2TCPIP_H -#include -#endif -#endif -#else -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#endif - ]) -]) - - dnl CURL_CHECK_FUNC_GETNAMEINFO dnl ------------------------------------------------- dnl Test if the getnameinfo function is available, @@ -551,7 +463,6 @@ dnl argument in GETNAMEINFO_QUAL_ARG1. AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [ AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl - AC_REQUIRE([CURL_CHECK_TYPE_SOCKLEN_T])dnl AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h) # AC_MSG_CHECKING([for getnameinfo]) diff --git a/ares/ares.h b/ares/ares.h index 585e35049..38750fed7 100644 --- a/ares/ares.h +++ b/ares/ares.h @@ -260,7 +260,7 @@ int ares_gethostbyname_file(ares_channel channel, const char *name, void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen, int family, ares_host_callback callback, void *arg); void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, - socklen_t salen, int flags, + ares_socklen_t salen, int flags, ares_nameinfo_callback callback, void *arg); int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds); diff --git a/ares/ares_getnameinfo.3 b/ares/ares_getnameinfo.3 index 55918ffba..91d281252 100644 --- a/ares/ares_getnameinfo.3 +++ b/ares/ares_getnameinfo.3 @@ -14,7 +14,7 @@ .\" this software for any purpose. It is provided "as is" .\" without express or implied warranty. .\" -.TH ARES_GETNAMEINFO 3 "16 May 2005" +.TH ARES_GETNAMEINFO 3 "1 May 2009" .SH NAME ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner .SH SYNOPSIS @@ -25,7 +25,7 @@ ares_getnameinfo \- Address-to-nodename translation in protocol-independent mann .B int \fItimeouts\fP, char *\fInode\fP, char *\fIservice\fP) .PP .B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP, -.B socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP, +.B ares_socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP, .B void *\fIarg\fP) .fi .SH DESCRIPTION diff --git a/ares/ares_getnameinfo.c b/ares/ares_getnameinfo.c index c75e94468..38f559947 100644 --- a/ares/ares_getnameinfo.c +++ b/ares/ares_getnameinfo.c @@ -92,7 +92,8 @@ static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, #endif static char *ares_striendstr(const char *s1, const char *s2); -void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, socklen_t salen, +void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, + ares_socklen_t salen, int flags, ares_nameinfo_callback callback, void *arg) { struct sockaddr_in *addr = NULL; diff --git a/ares/ares_ipv6.h b/ares/ares_ipv6.h index 05d2c54b4..e8229dfca 100644 --- a/ares/ares_ipv6.h +++ b/ares/ares_ipv6.h @@ -49,7 +49,7 @@ struct addrinfo int ai_family; int ai_socktype; int ai_protocol; - socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ + ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ char *ai_canonname; struct sockaddr *ai_addr; struct addrinfo *ai_next; diff --git a/ares/ares_process.c b/ares/ares_process.c index e2d902fd1..c4848108a 100644 --- a/ares/ares_process.c +++ b/ares/ares_process.c @@ -429,7 +429,7 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds, unsigned char buf[PACKETSZ + 1]; #ifdef HAVE_RECVFROM struct sockaddr_in from; - socklen_t fromlen; + ares_socklen_t fromlen; #endif if(!read_fds && (read_fd == ARES_SOCKET_BAD)) diff --git a/ares/configure.ac b/ares/configure.ac index b91915e33..78dde8973 100644 --- a/ares/configure.ac +++ b/ares/configure.ac @@ -551,9 +551,6 @@ AC_CHECK_TYPE([bool],[ CARES_CONFIGURE_ARES_SOCKLEN_T -# Check for socklen_t or equivalent -CURL_CHECK_TYPE_SOCKLEN_T - TYPE_IN_ADDR_T TYPE_SOCKADDR_STORAGE diff --git a/ares/setup_once.h b/ares/setup_once.h index bd5eba393..99367aaa6 100644 --- a/ares/setup_once.h +++ b/ares/setup_once.h @@ -3,7 +3,7 @@ /* $Id$ */ -/* Copyright (C) 2004 - 2008 by Daniel Stenberg et al +/* Copyright (C) 2004 - 2009 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 @@ -99,23 +99,6 @@ struct timeval { #endif -/* - * Windows build targets have socklen_t definition in - * ws2tcpip.h but some versions of ws2tcpip.h do not - * have the definition. It seems that when the socklen_t - * definition is missing from ws2tcpip.h the definition - * for INET_ADDRSTRLEN is also missing, and that when one - * definition is present the other one also is available. - */ - -#if defined(WIN32) && !defined(HAVE_CONFIG_H) -# if ( defined(_MSC_VER) && !defined(INET_ADDRSTRLEN) ) || \ - (!defined(_MSC_VER) && !defined(HAVE_WS2TCPIP_H) ) -# define socklen_t int -# endif -#endif - - #if defined(__minix) /* Minix doesn't support recv on TCP sockets */ #define sread(x,y,z) (ssize_t)read((RECV_TYPE_ARG1)(x), \ @@ -444,88 +427,5 @@ typedef int sig_atomic_t; #define ZERO_NULL 0 -#if defined (__LP64__) && defined(__hpux) && !defined(_XOPEN_SOURCE_EXTENDED) -#include -/* HP-UX has this oddity where it features a few functions that don't work - with socklen_t so we need to convert to ints - - This is due to socklen_t being a 64bit int under 64bit ABI, but the - pre-xopen (default) interfaces require an int, which is 32bits. - - Therefore, Anytime socklen_t is passed by pointer, the libc function - truncates the 64bit socklen_t value by treating it as a 32bit value. - - - Note that some socket calls are allowed to have a NULL pointer for - the socklen arg. -*/ - -inline static int Curl_hp_getsockname(int s, struct sockaddr *name, - socklen_t *namelen) -{ - int rc; - if(namelen) { - int len = *namelen; - rc = getsockname(s, name, &len); - *namelen = len; - } - else - rc = getsockname(s, name, 0); - return rc; -} - -inline static int Curl_hp_getsockopt(int s, int level, int optname, - void *optval, socklen_t *optlen) -{ - int rc; - if(optlen) { - int len = *optlen; - rc = getsockopt(s, level, optname, optval, &len); - *optlen = len; - } - else - rc = getsockopt(s, level, optname, optval, 0); - return rc; -} - -inline static int Curl_hp_accept(int sockfd, struct sockaddr *addr, - socklen_t *addrlen) -{ - int rc; - if(addrlen) { - int len = *addrlen; - rc = accept(sockfd, addr, &len); - *addrlen = len; - } - else - rc = accept(sockfd, addr, 0); - return rc; -} - - -inline static ssize_t Curl_hp_recvfrom(int s, void *buf, size_t len, int flags, - struct sockaddr *from, - socklen_t *fromlen) -{ - ssize_t rc; - if(fromlen) { - int fromlen32 = *fromlen; - rc = recvfrom(s, buf, len, flags, from, &fromlen32); - *fromlen = fromlen32; - } - else { - rc = recvfrom(s, buf, len, flags, from, 0); - } - return rc; -} - -#define getsockname(a,b,c) Curl_hp_getsockname((a),(b),(c)) -#define getsockopt(a,b,c,d,e) Curl_hp_getsockopt((a),(b),(c),(d),(e)) -#define accept(a,b,c) Curl_hp_accept((a),(b),(c)) -#define recvfrom(a,b,c,d,e,f) Curl_hp_recvfrom((a),(b),(c),(d),(e),(f)) - -#endif /* HPUX work-around */ - - #endif /* __SETUP_ONCE_H */