Send inn-committers mailing list submissions to
        inn-committers@lists.isc.org

To subscribe or unsubscribe via the World Wide Web, visit
        https://lists.isc.org/mailman/listinfo/inn-committers
or, via email, send a message with subject or body 'help' to
        inn-committers-requ...@lists.isc.org

You can reach the person managing the list at
        inn-committers-ow...@lists.isc.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of inn-committers digest..."


Today's Topics:

   1. INN commit: trunk (6 files) (INN Commit)


----------------------------------------------------------------------

Message: 1
Date: Tue, 30 Jul 2013 13:13:01 -0700 (PDT)
From: INN Commit <r...@isc.org>
To: inn-committ...@isc.org
Subject: INN commit: trunk (6 files)
Message-ID: <20130730201301.906a667...@hope.eyrie.org>

    Date: Tuesday, July 30, 2013 @ 13:13:01
  Author: iulius
Revision: 9514

fix cast-align warnings

GCC on some platforms warns about casts from struct sockaddr to one
of the more specific subtypes on the grounds that the alignment
requirements increase.  Restructure code in getaddrinfo.c to avoid
needing the casts and cast through void * everywhere else to suppress
the warnings.  (In all cases, we are assured that the underlying data
is properly aligned.)

Thanks to Russ Allbery for the patch (from rra-c-util).

Modified:
  trunk/innd/rc.c
  trunk/lib/getaddrinfo.c
  trunk/lib/getnameinfo.c
  trunk/lib/network.c
  trunk/tests/lib/getaddrinfo-t.c
  trunk/tests/lib/network-t.c

---------------------------+
 innd/rc.c                 |   16 ++++++++--------
 lib/getaddrinfo.c         |   15 ++++++++-------
 lib/getnameinfo.c         |    2 +-
 lib/network.c             |   20 ++++++++++----------
 tests/lib/getaddrinfo-t.c |   28 ++++++++++++++--------------
 tests/lib/network-t.c     |    2 +-
 6 files changed, 42 insertions(+), 41 deletions(-)

Modified: innd/rc.c
===================================================================
--- innd/rc.c   2013-07-26 20:30:29 UTC (rev 9513)
+++ innd/rc.c   2013-07-30 20:13:01 UTC (rev 9514)
@@ -149,19 +149,19 @@
 #ifdef HAVE_INET6
     if (s_local->sa_family == AF_INET6)
     {
-       port1 = ntohs(((struct sockaddr_in6 *) s_local)->sin6_port);
-       port2 = ntohs(((struct sockaddr_in6 *) s_distant)->sin6_port);
-       ((struct sockaddr_in6 *) s_local)->sin6_port = 0;
-       ((struct sockaddr_in6 *) s_distant)->sin6_port = htons(PORT_IDENTD);
+        port1 = ntohs(((struct sockaddr_in6 *) (void *) s_local)->sin6_port);
+        port2 = ntohs(((struct sockaddr_in6 *) (void *) s_distant)->sin6_port);
+        ((struct sockaddr_in6 *) (void *) s_local)->sin6_port = 0;
+        ((struct sockaddr_in6 *) (void *) s_distant)->sin6_port = 
htons(PORT_IDENTD);
        ident_fd = socket(PF_INET6, SOCK_STREAM, 0);
     } else
 #endif
     if (s_local->sa_family == AF_INET)
     {
-       port1 = ntohs(((struct sockaddr_in *) s_local)->sin_port);
-        port2 = ntohs(((struct sockaddr_in *) s_distant)->sin_port);
-       ((struct sockaddr_in *) s_local)->sin_port = 0;
-       ((struct sockaddr_in *) s_distant)->sin_port = htons(PORT_IDENTD);
+        port1 = ntohs(((struct sockaddr_in *) (void *) s_local)->sin_port);
+        port2 = ntohs(((struct sockaddr_in *) (void *) s_distant)->sin_port);
+        ((struct sockaddr_in *) (void *) s_local)->sin_port = 0;
+        ((struct sockaddr_in *) (void *) s_distant)->sin_port = 
htons(PORT_IDENTD);
        ident_fd = socket(PF_INET, SOCK_STREAM, 0);
     } else
     {

Modified: lib/getaddrinfo.c
===================================================================
--- lib/getaddrinfo.c   2013-07-26 20:30:29 UTC (rev 9513)
+++ lib/getaddrinfo.c   2013-07-30 20:13:01 UTC (rev 9514)
@@ -176,15 +176,17 @@
                  unsigned short port)
 {
     struct addrinfo *ai;
+    struct sockaddr_in *sin;
 
     ai = malloc(sizeof(*ai));
     if (ai == NULL)
         return NULL;
-    ai->ai_addr = malloc(sizeof(struct sockaddr_in));
-    if (ai->ai_addr == NULL) {
+    sin = calloc(1, sizeof(struct sockaddr_in));
+    if (sin == NULL) {
         free(ai);
         return NULL;
     }
+    ai->ai_addr = (struct sockaddr *) sin;
     ai->ai_next = NULL;
     if (canonical == NULL)
         ai->ai_canonname = NULL;
@@ -195,16 +197,15 @@
             return NULL;
         }
     }
-    memset(ai->ai_addr, 0, sizeof(struct sockaddr_in));
     ai->ai_flags = 0;
     ai->ai_family = AF_INET;
     ai->ai_socktype = socktype;
     ai->ai_protocol = (socktype == SOCK_DGRAM) ? IPPROTO_UDP : IPPROTO_TCP;
     ai->ai_addrlen = sizeof(struct sockaddr_in);
-    ((struct sockaddr_in *) ai->ai_addr)->sin_family = AF_INET;
-    ((struct sockaddr_in *) ai->ai_addr)->sin_addr = addr;
-    ((struct sockaddr_in *) ai->ai_addr)->sin_port = htons(port);
-    sin_set_length((struct sockaddr_in *) ai->ai_addr);
+    sin->sin_family = AF_INET;
+    sin->sin_addr = addr;
+    sin->sin_port = htons(port);
+    sin_set_length(sin);
     return ai;
 }
 

Modified: lib/getnameinfo.c
===================================================================
--- lib/getnameinfo.c   2013-07-26 20:30:29 UTC (rev 9513)
+++ lib/getnameinfo.c   2013-07-30 20:13:01 UTC (rev 9514)
@@ -148,7 +148,7 @@
     /* We only support AF_INET. */
     if (sa->sa_family != AF_INET)
         return EAI_FAMILY;
-    sin = (const struct sockaddr_in *) sa;
+    sin = (const struct sockaddr_in *) (const void *) sa;
 
     /* Name lookup. */
     if (node != NULL && nodelen > 0) {

Modified: lib/network.c
===================================================================
--- lib/network.c       2013-07-26 20:30:29 UTC (rev 9513)
+++ lib/network.c       2013-07-30 20:13:01 UTC (rev 9514)
@@ -645,7 +645,7 @@
     if (addr->sa_family == AF_INET6) {
         const struct sockaddr_in6 *sin6;
 
-        sin6 = (const struct sockaddr_in6 *) addr;
+        sin6 = (const struct sockaddr_in6 *) (void *) addr;
         if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
             struct in_addr in;
 
@@ -659,7 +659,7 @@
     if (addr->sa_family == AF_INET) {
         const struct sockaddr_in *sin;
 
-        sin = (const struct sockaddr_in *) addr;
+        sin = (const struct sockaddr_in *) (void *) addr;
         result = inet_ntop(AF_INET, &sin->sin_addr, dst, size);
         return (result != NULL);
     } else {
@@ -677,20 +677,20 @@
 bool
 network_sockaddr_equal(const struct sockaddr *a, const struct sockaddr *b)
 {
-    const struct sockaddr_in *a4 = (const struct sockaddr_in *) a;
-    const struct sockaddr_in *b4 = (const struct sockaddr_in *) b;
+    const struct sockaddr_in *a4 = (const struct sockaddr_in *) (void *) a;
+    const struct sockaddr_in *b4 = (const struct sockaddr_in *) (void *) b;
 
 #ifdef HAVE_INET6
-    const struct sockaddr_in6 *a6 = (const struct sockaddr_in6 *) a;
-    const struct sockaddr_in6 *b6 = (const struct sockaddr_in6 *) b;
+    const struct sockaddr_in6 *a6 = (const struct sockaddr_in6 *) (void *) a;
+    const struct sockaddr_in6 *b6 = (const struct sockaddr_in6 *) (void *) b;
     const struct sockaddr *tmp;
 
     if (a->sa_family == AF_INET && b->sa_family == AF_INET6) {
         tmp = a;
         a = b;
         b = tmp;
-        a6 = (const struct sockaddr_in6 *) a;
-        b4 = (const struct sockaddr_in *) b;
+        a6 = (const struct sockaddr_in6 *) (void *) a;
+        b4 = (const struct sockaddr_in *) (void *) b;
     }
     if (a->sa_family == AF_INET6) {
         if (b->sa_family == AF_INET6)
@@ -726,14 +726,14 @@
     const struct sockaddr_in6 *sin6;
 
     if (sa->sa_family == AF_INET6) {
-        sin6 = (const struct sockaddr_in6 *) sa;
+        sin6 = (const struct sockaddr_in6 *) (void *) sa;
         return htons(sin6->sin6_port);
     }
 #endif
     if (sa->sa_family != AF_INET)
         return 0;
     else {
-        sin = (const struct sockaddr_in *) sa;
+        sin = (const struct sockaddr_in *) (void *) sa;
         return htons(sin->sin_port);
     }
 }

Modified: tests/lib/getaddrinfo-t.c
===================================================================
--- tests/lib/getaddrinfo-t.c   2013-07-26 20:30:29 UTC (rev 9513)
+++ tests/lib/getaddrinfo-t.c   2013-07-30 20:13:01 UTC (rev 9514)
@@ -71,7 +71,7 @@
     is_int(IPPROTO_TCP, ai->ai_protocol, "...right protocol");
     is_string(NULL, ai->ai_canonname, "...no canonname");
     is_int(sizeof(struct sockaddr_in), ai->ai_addrlen, "...right addrlen");
-    saddr = (struct sockaddr_in *) ai->ai_addr;
+    saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
     is_int(htons(25), saddr->sin_port, "...right port");
     ok(saddr->sin_addr.s_addr == htonl(0x7f000001UL), "...right address");
     test_freeaddrinfo(ai);
@@ -81,7 +81,7 @@
     hints.ai_socktype = SOCK_STREAM;
     ok(test_getaddrinfo(NULL, "25", &hints, &ai) == 0, "passive lookup");
     is_int(SOCK_STREAM, ai->ai_socktype, "...right socktype");
-    saddr = (struct sockaddr_in *) ai->ai_addr;
+    saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
     is_int(htons(25), saddr->sin_port, "...right port");
     ok(saddr->sin_addr.s_addr == INADDR_ANY, "...right address");
     test_freeaddrinfo(ai);
@@ -94,7 +94,7 @@
         ok(test_getaddrinfo(NULL, "smtp", &hints, &ai) == 0,
            "service of smtp");
         is_int(SOCK_STREAM, ai->ai_socktype, "...right socktype");
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         is_int(htons(25), saddr->sin_port, "...right port");
         ok(saddr->sin_addr.s_addr == INADDR_ANY, "...right address");
         test_freeaddrinfo(ai);
@@ -109,7 +109,7 @@
        "AI_NUMERICSERV with 25 space");
     ok(test_getaddrinfo(NULL, "25", &hints, &ai) == 0,
        "valid AI_NUMERICSERV");
-    saddr = (struct sockaddr_in *) ai->ai_addr;
+    saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
     is_int(htons(25), saddr->sin_port, "...right port");
     ok(saddr->sin_addr.s_addr == htonl(0x7f000001UL), "...right address");
     test_freeaddrinfo(ai);
@@ -135,7 +135,7 @@
     is_int(IPPROTO_TCP, ai->ai_protocol, "...right protocol");
     is_string(NULL, ai->ai_canonname, "...no canonname");
     is_int(sizeof(struct sockaddr_in), ai->ai_addrlen, "...right addrlen");
-    saddr = (struct sockaddr_in *) ai->ai_addr;
+    saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
     is_int(0, saddr->sin_port, "...right port");
     ok(saddr->sin_addr.s_addr == addr.s_addr, "...right address");
     test_freeaddrinfo(ai);
@@ -149,7 +149,7 @@
         is_int(SOCK_STREAM, ai->ai_socktype, "...right socktype");
         is_int(IPPROTO_TCP, ai->ai_protocol, "...right protocol");
         is_string(NULL, ai->ai_canonname, "...no canonname");
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         is_int(htons(25), saddr->sin_port, "...right port");
         ok(saddr->sin_addr.s_addr == addr.s_addr, "...right address");
         test_freeaddrinfo(ai);
@@ -162,7 +162,7 @@
        "AI_NUMERICHOST and AI_NUMERICSERV with symbolic name");
     ok(test_getaddrinfo("10.20.30.40", "25", &hints, &ai) == 0,
        "valid AI_NUMERICHOST and AI_NUMERICSERV");
-    saddr = (struct sockaddr_in *) ai->ai_addr;
+    saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
     is_int(htons(25), saddr->sin_port, "...right port");
     ok(saddr->sin_addr.s_addr == addr.s_addr, "...right address");
     test_freeaddrinfo(ai);
@@ -174,7 +174,7 @@
         ok(test_getaddrinfo("10.20.30.40", "smtp", &hints, &ai) == 0,
            "AI_NUMERICHOST and AI_CANONNAME");
         is_string("10.20.30.40", ai->ai_canonname, "...right canonname");
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         is_int(htons(25), saddr->sin_port, "...right port");
         ok(saddr->sin_addr.s_addr == addr.s_addr, "...right address");
         test_freeaddrinfo(ai);
@@ -190,7 +190,7 @@
            "domain service with UDP hint");
         is_int(SOCK_DGRAM, ai->ai_socktype, "...right socktype");
         is_string(NULL, ai->ai_canonname, "...no canonname");
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         is_int(htons(53), saddr->sin_port, "...right port");
         ok(saddr->sin_addr.s_addr == addr.s_addr, "...right address");
         test_freeaddrinfo(ai);
@@ -207,7 +207,7 @@
            "lookup of www.isc.org");
         is_int(SOCK_STREAM, ai->ai_socktype, "...right socktype");
         is_string(NULL, ai->ai_canonname, "...no canonname");
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         is_int(htons(80), saddr->sin_port, "...right port");
         ok(saddr->sin_addr.s_addr != INADDR_ANY, "...address is something");
         addr = saddr->sin_addr;
@@ -217,7 +217,7 @@
         ok(test_getaddrinfo("www.isc.org", "80", &hints, &ai) == 0,
            "lookup of www.isc.org with A_CANONNAME");
         ok(ai->ai_canonname != NULL, "...canonname isn't null");
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         is_int(htons(80), saddr->sin_port, "...right port");
         ok(saddr->sin_addr.s_addr == addr.s_addr, "...and same address");
         test_freeaddrinfo(ai);
@@ -230,7 +230,7 @@
     else {
         ok(test_getaddrinfo("cnn.com", "80", NULL, &ai) == 0,
            "lookup of cnn.com with multiple A records");
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         is_int(htons(80), saddr->sin_port, "...right port");
         ok(saddr->sin_addr.s_addr != INADDR_ANY, "...address is something");
         test_freeaddrinfo(ai);
@@ -253,7 +253,7 @@
     hints.ai_flags = AI_CANONNAME;
     ok(test_getaddrinfo("cnn.com", NULL, &hints, &ai) == 0,
        "lookup of cnn.com");
-    saddr = (struct sockaddr_in *) ai->ai_addr;
+    saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
     is_int(0, saddr->sin_port, "...port is 0");
     first = ai;
     for (found = 0; ai != NULL; ai = ai->ai_next) {
@@ -266,7 +266,7 @@
             break;
         }
         found = 0;
-        saddr = (struct sockaddr_in *) ai->ai_addr;
+        saddr = (struct sockaddr_in *) (void *) ai->ai_addr;
         addr = saddr->sin_addr;
         for (i = 0; host->h_addr_list[i] != NULL; i++)
             if (memcmp(&addr, host->h_addr_list[i], host->h_length) == 0)

Modified: tests/lib/network-t.c
===================================================================
--- tests/lib/network-t.c       2013-07-26 20:30:29 UTC (rev 9513)
+++ tests/lib/network-t.c       2013-07-30 20:13:01 UTC (rev 9514)
@@ -113,7 +113,7 @@
     listener_handler(client);
     is_int(AF_INET, saddr->sa_family, "...address family is IPv4");
     is_int(htonl(0x7f000001UL),
-           ((struct sockaddr_in *) saddr)->sin_addr.s_addr,
+           ((struct sockaddr_in *) (void *) saddr)->sin_addr.s_addr,
            "...and client address is 127.0.0.1");
     free(saddr);
     for (i = 0; i < count; i++)



------------------------------

_______________________________________________
inn-committers mailing list
inn-committers@lists.isc.org
https://lists.isc.org/mailman/listinfo/inn-committers

End of inn-committers Digest, Vol 53, Issue 7
*********************************************

Reply via email to