mirror of
https://github.com/SCST-project/scst.git
synced 2026-08-20 06:06:23 +00:00
gcc 4.4.1 (as included in openSUSE 11.2) complains about the user-space iSCSI code because it breaks strict-aliasing rules. The reported warnings should be addressed because not doing so can result in the compiler generating incorrect code. The patch below fixes these compiler warnings.
Signed-off-by: Bart Van Assche <bart.vanassche@gmail.com> git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1352 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -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],
|
||||
|
||||
+24
-12
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user