From: Yang Tse Date: Fri, 12 Nov 2010 17:53:58 +0000 (+0100) Subject: Revert following commits: X-Git-Tag: upstream/1.10.0~268 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=747981be8eadc4d8be5bc673c0b64efa556adf4e;p=platform%2Fupstream%2Fc-ares.git Revert following commits: 07bc7ea79509bcc9ef6e09151e81766ed00d3392 3392a50ea3f8573ea4b7a9d82b9833dab60cb0e9 9912637d32c9987719a1ea12db591aee2941891c The purpose of the whole patch was to silence a compiler warning triggered with GCC 4 on file ares_process.c The specific compiler warning was 'dereferencing type-punned pointer might break strict-aliasing rules'. A simpler patch will follow to equally silence the warning. --- diff --git a/acinclude.m4 b/acinclude.m4 index daa0c92..336dfab 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -669,45 +669,6 @@ AC_DEFUN([TYPE_SOCKADDR_STORAGE], ]) ]) -dnl TYPE_SOCKADDR_STORAGE_SSFAM -dnl ------------------------------------------------- -dnl Check for struct sockaddr_storage.ss_family -dnl Seems some AIX systems don't have this. - -AC_DEFUN([TYPE_SOCKADDR_STORAGE_SSFAM], -[ - CARES_CHECK_STRUCT_MEMBER( - [ -#undef inline -#ifdef HAVE_WINDOWS_H -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#ifdef HAVE_WINSOCK2_H -#include -#endif -#else -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_ARPA_INET_H -#include -#endif -#endif -], - [sockaddr_storage], [ss_family], - AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE_SSFAM, 1, - [if struct sockaddr_storage.ss_family is defined]), , - ) -]) - dnl CURL_CHECK_NI_WITHSCOPEID dnl ------------------------------------------------- @@ -1936,26 +1897,6 @@ AC_DEFUN([CARES_CHECK_STRUCT], [ fi ]) -dnl This macro determines if the specified struct member exists in the specified file -dnl Syntax: -dnl CARES_CHECK_STRUCT_MEMBER(headers, struct name, member, if found, [if not found]) - -AC_DEFUN([CARES_CHECK_STRUCT_MEMBER], [ - AC_MSG_CHECKING([for struct $2.$3]) - AC_TRY_COMPILE([$1], - [ - struct $2 struct_instance; - void* foo = &(struct_instance.$3); - ], ac_struct_member="yes", ac_found="no") - if test "$ac_struct_member" = "yes" ; then - AC_MSG_RESULT(yes) - $4 - else - AC_MSG_RESULT(no) - $5 - fi -]) - dnl This macro determines if the specified constant exists in the specified file dnl Syntax: dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found]) diff --git a/ares_process.c b/ares_process.c index 8e9a9cd..c3d7fa4 100644 --- a/ares_process.c +++ b/ares_process.c @@ -434,15 +434,11 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds, unsigned char buf[PACKETSZ + 1]; #ifdef HAVE_RECVFROM ares_socklen_t fromlen; -#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SSFAM - struct sockaddr_storage from; -#else union { struct sockaddr_in sa4; struct sockaddr_in6 sa6; } from; #endif -#endif if(!read_fds && (read_fd == ARES_SOCKET_BAD)) /* no possible action */ @@ -477,7 +473,10 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds, * packets as we can. */ do { #ifdef HAVE_RECVFROM - fromlen = sizeof(from); /* doesn't matter if it's larger than needed */ + if (server->addr.family == AF_INET) + fromlen = sizeof(from.sa4); + else + fromlen = sizeof(from.sa6); count = (ssize_t)recvfrom(server->udp_socket, (void *)buf, sizeof(buf), 0, (struct sockaddr *)&from, &fromlen); #else @@ -488,15 +487,7 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds, else if (count <= 0) handle_error(channel, i, now); #ifdef HAVE_RECVFROM -#ifdef HAVE_STRUCT_SOCKADDR_STORAGE_SSFAM - /* This family hack works around compiler warnings about - * aliases. - */ - else if (!((from.ss_family == server->addr.family) && - same_address((struct sockaddr *)&from, &server->addr))) -#else else if (!same_address((struct sockaddr *)&from, &server->addr)) -#endif /* The address the response comes from does not match * the address we sent the request to. Someone may be * attempting to perform a cache poisoning attack. */ @@ -1186,10 +1177,8 @@ static int same_address(struct sockaddr *sa, struct ares_addr *aa) void *addr1; void *addr2; -#ifndef HAVE_STRUCT_SOCKADDR_STORAGE_SSFAM if (sa->sa_family == aa->family) { -#endif switch (aa->family) { case AF_INET: @@ -1207,9 +1196,7 @@ static int same_address(struct sockaddr *sa, struct ares_addr *aa) default: break; } -#ifndef HAVE_STRUCT_SOCKADDR_STORAGE_SSFAM } -#endif return 0; /* different */ } diff --git a/configure.ac b/configure.ac index f24892f..d505e16 100644 --- a/configure.ac +++ b/configure.ac @@ -506,7 +506,6 @@ CARES_CONFIGURE_ARES_SOCKLEN_T TYPE_IN_ADDR_T TYPE_SOCKADDR_STORAGE -TYPE_SOCKADDR_STORAGE_SSFAM TYPE_SIG_ATOMIC_T