[Python-checkins] cpython: Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.

charles-francois.natali python-checkins at python.org
Fri Dec 23 16:45:11 CET 2011


http://hg.python.org/cpython/rev/683a1b1ff15d
changeset:   74142:683a1b1ff15d
user:        Charles-François Natali <neologix at free.fr>
date:        Fri Dec 23 16:44:51 2011 +0100
summary:
  Issue #8623: Fix some strict-aliasing warnings. Patch by David Watson.

files:
  Modules/socketmodule.c |  25 +++++++++----------------
  Modules/socketmodule.h |   1 +
  2 files changed, 10 insertions(+), 16 deletions(-)


diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -436,7 +436,8 @@
 #define SEGMENT_SIZE (32 * 1024 -1)
 #endif
 
-#define SAS2SA(x)       ((struct sockaddr *)(x))
+/* Convert "sock_addr_t *" to "struct sockaddr *". */
+#define SAS2SA(x)       (&((x)->sa))
 
 /*
  * Constants for getnameinfo()
@@ -4148,11 +4149,7 @@
 {
     char *name;
     struct hostent *h;
-#ifdef ENABLE_IPV6
-    struct sockaddr_storage addr;
-#else
-    struct sockaddr_in addr;
-#endif
+    sock_addr_t addr;
     struct sockaddr *sa;
     PyObject *ret = NULL;
 #ifdef HAVE_GETHOSTBYNAME_R
@@ -4171,7 +4168,7 @@
 
     if (!PyArg_ParseTuple(args, "et:gethostbyname_ex", "idna", &name))
         return NULL;
-    if (setipaddr(name, (struct sockaddr *)&addr, sizeof(addr), AF_INET) < 0)
+    if (setipaddr(name, SAS2SA(&addr), sizeof(addr), AF_INET) < 0)
         goto finally;
     Py_BEGIN_ALLOW_THREADS
 #ifdef HAVE_GETHOSTBYNAME_R
@@ -4196,8 +4193,8 @@
        addr.ss_family.
        Therefore, we cast the sockaddr_storage into sockaddr to
        access sa_family. */
-    sa = (struct sockaddr*)&addr;
-    ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr),
+    sa = SAS2SA(&addr);
+    ret = gethost_common(h, SAS2SA(&addr), sizeof(addr),
                          sa->sa_family);
 #ifdef USE_GETHOSTBYNAME_LOCK
     PyThread_release_lock(netdb_lock);
@@ -4220,12 +4217,8 @@
 static PyObject *
 socket_gethostbyaddr(PyObject *self, PyObject *args)
 {
-#ifdef ENABLE_IPV6
-    struct sockaddr_storage addr;
-#else
-    struct sockaddr_in addr;
-#endif
-    struct sockaddr *sa = (struct sockaddr *)&addr;
+    sock_addr_t addr;
+    struct sockaddr *sa = SAS2SA(&addr);
     char *ip_num;
     struct hostent *h;
     PyObject *ret = NULL;
@@ -4294,7 +4287,7 @@
     h = gethostbyaddr(ap, al, af);
 #endif /* HAVE_GETHOSTBYNAME_R */
     Py_END_ALLOW_THREADS
-    ret = gethost_common(h, (struct sockaddr *)&addr, sizeof(addr), af);
+    ret = gethost_common(h, SAS2SA(&addr), sizeof(addr), af);
 #ifdef USE_GETHOSTBYNAME_LOCK
     PyThread_release_lock(netdb_lock);
 #endif
diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h
--- a/Modules/socketmodule.h
+++ b/Modules/socketmodule.h
@@ -115,6 +115,7 @@
 /* Socket address */
 typedef union sock_addr {
     struct sockaddr_in in;
+    struct sockaddr sa;
 #ifdef AF_UNIX
     struct sockaddr_un un;
 #endif

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list