]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* inet/rcmd.c (rresvport_af): Change ss to anonymous union
authorSteve Ellcey <sellcey@mips.com>
Tue, 19 May 2015 20:09:01 +0000 (13:09 -0700)
committerSteve Ellcey <sellcey@mips.com>
Tue, 19 May 2015 20:09:01 +0000 (13:09 -0700)
in order to avoid strict alias warnings.
(iruserok_af): Ditto for ra.

ChangeLog
inet/rcmd.c

index 4268eb75adc9e69a50750d1e272832db5b7c56e2..50803702b1ee449c9b84f1b92c19437fe37cd551 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-05-19  Paul Eggert  <eggert@cs.ucla.edu>
+           Steve Ellcey  <sellcey@imgtec.com>
+
+       * inet/rcmd.c (rresvport_af): Change ss to anonymous union
+       in order to avoid strict alias warnings.
+       (iruserok_af): Ditto for ra.
+
 2015-05-19  James Lemke  <jwlemke@codesourcery.com>
 
        [BZ #17581]
index acacaa0d8a78cd256589f3eed24690e2e8f1c03b..98b3735d1fce2a69f42a7dd33daddb39ed42d506 100644 (file)
@@ -114,10 +114,10 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
        struct addrinfo hints, *res, *ai;
        union
        {
-         struct sockaddr sa;
-         struct sockaddr_storage ss;
-         struct sockaddr_in sin;
-         struct sockaddr_in6 sin6;
+               struct sockaddr sa;
+               struct sockaddr_storage ss;
+               struct sockaddr_in sin;
+               struct sockaddr_in6 sin6;
        } from;
        struct pollfd pfd[2];
        int32_t oldmask;
@@ -374,7 +374,11 @@ rresvport_af(alport, family)
        int *alport;
        sa_family_t family;
 {
-       struct sockaddr_storage ss;
+       union {
+               struct sockaddr generic;
+               struct sockaddr_in in;
+               struct sockaddr_in6 in6;
+       } ss;
        int s;
        size_t len;
        uint16_t *sport;
@@ -382,11 +386,11 @@ rresvport_af(alport, family)
        switch(family){
        case AF_INET:
                len = sizeof(struct sockaddr_in);
-               sport = &((struct sockaddr_in *)&ss)->sin_port;
+               sport = &ss.in.sin_port;
                break;
        case AF_INET6:
                len = sizeof(struct sockaddr_in6);
-               sport = &((struct sockaddr_in6 *)&ss)->sin6_port;
+               sport = &ss.in6.sin6_port;
                break;
        default:
                __set_errno (EAFNOSUPPORT);
@@ -398,9 +402,9 @@ rresvport_af(alport, family)
 
        memset (&ss, '\0', sizeof(ss));
 #ifdef SALEN
-       ss.__ss_len = len;
+       ss.generic.__ss_len = len;
 #endif
-       ss.ss_family = family;
+       ss.generic.sa_family = family;
 
        /* Ignore invalid values.  */
        if (*alport < IPPORT_RESERVED / 2)
@@ -411,7 +415,7 @@ rresvport_af(alport, family)
        int start = *alport;
        do {
                *sport = htons((uint16_t) *alport);
-               if (__bind(s, (struct sockaddr *)&ss, len) >= 0)
+               if (__bind(s, &ss.generic, len) >= 0)
                        return s;
                if (errno != EADDRINUSE) {
                        (void)__close(s);
@@ -604,27 +608,29 @@ iruserok_af (raddr, superuser, ruser, luser, af)
      const char *ruser, *luser;
      sa_family_t af;
 {
-  struct sockaddr_storage ra;
+  union {
+    struct sockaddr generic;
+    struct sockaddr_in in;
+    struct sockaddr_in6 in6;
+  } ra;
   size_t ralen;
 
   memset (&ra, '\0', sizeof(ra));
   switch (af){
   case AF_INET:
-    ra.ss_family = AF_INET;
-    memcpy (&(((struct sockaddr_in *)&ra)->sin_addr), raddr,
-           sizeof(struct in_addr));
+    ra.in.sin_family = AF_INET;
+    memcpy (&ra.in.sin_addr, raddr, sizeof(struct in_addr));
     ralen = sizeof(struct sockaddr_in);
     break;
   case AF_INET6:
-    ra.ss_family = AF_INET6;
-    memcpy (&(((struct sockaddr_in6 *)&ra)->sin6_addr), raddr,
-           sizeof(struct in6_addr));
+    ra.in6.sin6_family = AF_INET6;
+    memcpy (&ra.in6.sin6_addr, raddr, sizeof(struct in6_addr));
     ralen = sizeof(struct sockaddr_in6);
     break;
   default:
     return 0;
   }
-  return ruserok_sa ((struct sockaddr *)&ra, ralen, superuser, ruser, luser);
+  return ruserok_sa (&ra.generic, ralen, superuser, ruser, luser);
 }
 libc_hidden_def (iruserok_af)