Revert following commits:
authorYang Tse <yangsita@gmail.com>
Fri, 12 Nov 2010 17:53:58 +0000 (18:53 +0100)
committerYang Tse <yangsita@gmail.com>
Fri, 12 Nov 2010 17:53:58 +0000 (18:53 +0100)
  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.

acinclude.m4
ares_process.c
configure.ac

index daa0c92..336dfab 100644 (file)
@@ -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 <windows.h>
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h>
-#endif
-#else
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#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
-],
-       [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])
index 8e9a9cd..c3d7fa4 100644 (file)
@@ -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 */
 }
 
index f24892f..d505e16 100644 (file)
@@ -506,7 +506,6 @@ CARES_CONFIGURE_ARES_SOCKLEN_T
 TYPE_IN_ADDR_T
 
 TYPE_SOCKADDR_STORAGE
-TYPE_SOCKADDR_STORAGE_SSFAM
 
 TYPE_SIG_ATOMIC_T