gcc 4.4.1 (as included in openSUSE 11.2) complains about the user-space iSCSI code...
authorvlnb <vlnb@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Fri, 20 Nov 2009 19:53:12 +0000 (19:53 +0000)
committervlnb <vlnb@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Fri, 20 Nov 2009 19:53:12 +0000 (19:53 +0000)
Signed-off-by: Bart Van Assche <bart.vanassche@gmail.com>
git-svn-id: https://scst.svn.sourceforge.net/svnroot/scst/trunk@1352 d57e44dd-8a1f-0410-8b47-8ef2f437770f

iscsi-scst/usr/iscsi_scstd.c
iscsi-scst/usr/isns.c

index 58f15da..fa22cc1 100644 (file)
@@ -205,7 +205,11 @@ static void create_listen_socket(struct pollfd *array)
 
 static void accept_connection(int listen)
 {
-       struct sockaddr_storage from, to;
+       union {
+               struct sockaddr sa;
+               struct sockaddr_in sin;
+               struct sockaddr_in6 sin6;
+       } from, to;
        char portal[50]; /* for full IP6 address + port */
        socklen_t namesize;
        struct pollfd *pollfd;
@@ -213,7 +217,7 @@ static void accept_connection(int listen)
        int fd, i, rc;
 
        namesize = sizeof(from);
-       if ((fd = accept(listen, (struct sockaddr *)&from, &namesize)) < 0) {
+       if ((fd = accept(listen, &from.sa, &namesize)) < 0) {
                switch (errno) {
                case EINTR:
                case EAGAIN:
@@ -234,14 +238,14 @@ static void accept_connection(int listen)
        }
 
        namesize = sizeof(to);
-       rc = getsockname(fd, (struct sockaddr *)&to, &namesize);
+       rc = getsockname(fd, &to.sa, &namesize);
        if (rc == 0) {
-               if (from.ss_family == AF_INET) {
-                       struct sockaddr_in *in = (struct sockaddr_in *)&to;
+               if (from.sa.sa_family == AF_INET) {
+                       struct sockaddr_in *in = &to.sin;
                        rc = snprintf(portal, sizeof(portal), "%s:%hu",
                                inet_ntoa(in->sin_addr), ntohs(in->sin_port));
-               } else if (from.ss_family == AF_INET6) {
-                       struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)&to;
+               } else if (from.sa.sa_family == AF_INET6) {
+                       struct sockaddr_in6 *in6 = &to.sin6;
                        rc = snprintf(portal, sizeof(portal), "%x:%x:%x:%x:%x:%x:%x:%x.%hu",
                                in6->sin6_addr.s6_addr16[7], in6->sin6_addr.s6_addr16[6],
                                in6->sin6_addr.s6_addr16[5], in6->sin6_addr.s6_addr16[4],
@@ -257,12 +261,12 @@ static void accept_connection(int listen)
                goto out_close;
        }
 
-       if (from.ss_family == AF_INET) {
-               struct sockaddr_in *in = (struct sockaddr_in *)&from;
+       if (from.sa.sa_family == AF_INET) {
+               struct sockaddr_in *in = &from.sin;
                log_info("Connect from %s:%hu to %s", inet_ntoa(in->sin_addr),
                        ntohs(in->sin_port), portal);
-       } else if (from.ss_family == AF_INET6) {
-               struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)&from;
+       } else if (from.sa.sa_family == AF_INET6) {
+               struct sockaddr_in6 *in6 = &from.sin6;
                log_info("Connect from %x:%x:%x:%x:%x:%x:%x:%x.%hu to %s",
                        in6->sin6_addr.s6_addr16[7], in6->sin6_addr.s6_addr16[6],
                        in6->sin6_addr.s6_addr16[5], in6->sin6_addr.s6_addr16[4],
index 315f33a..482e178 100644 (file)
@@ -87,25 +87,29 @@ static int isns_get_ip(int fd)
 {
        int err, i;
        uint32_t addr;
-       struct sockaddr_storage lss;
+       union {
+               struct sockaddr sa;
+               struct sockaddr_in sin;
+               struct sockaddr_in6 sin6;
+       } lss;
        socklen_t slen = sizeof(lss);
 
-       err = getsockname(fd, (struct sockaddr *) &lss, &slen);
+       err = getsockname(fd, &lss.sa, &slen);
        if (err) {
                log_error("getsockname error: %s!", gai_strerror(err));
                return err;
        }
 
-       err = getnameinfo((struct sockaddr *) &lss, sizeof(lss),
+       err = getnameinfo(&lss.sa, sizeof(lss),
                          eid, sizeof(eid), NULL, 0, 0);
        if (err) {
                log_error("getaddrinfo error: %s!", gai_strerror(err));
                return err;
        }
 
-       switch (lss.ss_family) {
+       switch (lss.sa.sa_family) {
        case AF_INET:
-               addr = (((struct sockaddr_in *) &lss)->sin_addr.s_addr);
+               addr = lss.sin.sin_addr.s_addr;
 
                ip[10] = ip[11] = 0xff;
                ip[15] = 0xff & (addr >> 24);
@@ -115,7 +119,7 @@ static int isns_get_ip(int fd)
                break;
        case AF_INET6:
                for (i = 0; i < ARRAY_SIZE(ip); i++)
-                       ip[i] = ((struct sockaddr_in6 *) &lss)->sin6_addr.s6_addr[i];
+                       ip[i] = lss.sin6.sin6_addr.s6_addr[i];
                break;
        }
 
@@ -755,12 +759,16 @@ int isns_handle(int is_timeout, int *timeout)
 
 static int scn_accept_connection(void)
 {
-       struct sockaddr_storage from;
+       union {
+               struct sockaddr sa;
+               struct sockaddr_in sin;
+               struct sockaddr_in6 sin6;
+       } from;
        socklen_t slen;
        int fd, err, opt = 1;
 
        slen = sizeof(from);
-       fd = accept(scn_listen_fd, (struct sockaddr *) &from, &slen);
+       fd = accept(scn_listen_fd, &from.sa, &slen);
        if (fd < 0) {
                log_error("%s %d: accept error: %s", __func__, __LINE__,
                          strerror(errno));
@@ -850,7 +858,11 @@ int isns_scn_handle(int is_accept)
 static int scn_init(char *addr)
 {
        int fd, opt, err;
-       struct sockaddr_storage lss;
+       union {
+               struct sockaddr sa;
+               struct sockaddr_in sin;
+               struct sockaddr_in6 sin6;
+       } lss;
        socklen_t slen;
 
        fd = socket(ss.ss_family, SOCK_STREAM, IPPROTO_TCP);
@@ -882,10 +894,10 @@ static int scn_init(char *addr)
        }
 
        /* protocol independent way ? */
-       if (lss.ss_family == AF_INET6)
-               scn_listen_port = ntohs(((struct sockaddr_in6 *) &lss)->sin6_port);
+       if (lss.sa.sa_family == AF_INET6)
+               scn_listen_port = ntohs(lss.sin6.sin6_port);
        else
-               scn_listen_port = ntohs(((struct sockaddr_in *) &lss)->sin_port);
+               scn_listen_port = ntohs(lss.sin.sin_port);
 
        log_error("scn listen port %u %d %d\n", scn_listen_port, fd, err);
 out: