summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Dickson <steved@redhat.com>2009-07-09 14:55:13 -0400
committerSteve Dickson <steved@redhat.com>2009-07-09 14:55:13 -0400
commit5851af9f3362bd3ffd742d6e4a1eb87002a18dfc (patch)
treee7d073acd4a7eb97ef27028923115e6ccb825dea
parent2689de344a020332a6787bdf46e6af39e804aad3 (diff)
downloadti-rpc-5851af9f3362bd3ffd742d6e4a1eb87002a18dfc.tar.gz
Cleaned up some "break strict-aliasing rules" warnings
as well as some other warnings. Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--src/bindresvport.c5
-rw-r--r--src/clnt_bcast.c9
-rw-r--r--src/clnt_dg.c28
-rw-r--r--src/mt_misc.c2
-rw-r--r--src/rpc_generic.c17
5 files changed, 36 insertions, 25 deletions
diff --git a/src/bindresvport.c b/src/bindresvport.c
index 730dc6b..6ce3e81 100644
--- a/src/bindresvport.c
+++ b/src/bindresvport.c
@@ -88,11 +88,10 @@ bindresvport_sa(sd, sa)
salen = sizeof(myaddr);
sa = (struct sockaddr *)&myaddr;
- if (getsockname(sd, sa, &salen) == -1)
+ if (getsockname(sd, (struct sockaddr *)&myaddr, &salen) == -1)
return -1; /* errno is correctly set */
- af = sa->sa_family;
- memset(sa, 0, salen);
+ af = myaddr.ss_family;
} else
af = sa->sa_family;
diff --git a/src/clnt_bcast.c b/src/clnt_bcast.c
index fef7a4b..140407b 100644
--- a/src/clnt_bcast.c
+++ b/src/clnt_bcast.c
@@ -586,13 +586,12 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
struct netbuf *np;
#ifdef PORTMAP
struct netbuf taddr;
- struct sockaddr_in *sin;
+ struct sockaddr_in sin;
if (pmap_flag && pmap_reply_flag) {
- sin = (struct sockaddr_in *)
- (void *)&fdlist[i].raddr;
- sin->sin_port =
- htons((u_short)port);
+ memcpy(&sin, &fdlist[i].raddr, sizeof(sin));
+ sin.sin_port = htons((u_short)port);
+ memcpy(&fdlist[i].raddr, &sin, sizeof(sin));
taddr.len = taddr.maxlen =
sizeof(fdlist[i].raddr);
taddr.buf = &fdlist[i].raddr;
diff --git a/src/clnt_dg.c b/src/clnt_dg.c
index 2f870b1..79fed5d 100644
--- a/src/clnt_dg.c
+++ b/src/clnt_dg.c
@@ -312,7 +312,7 @@ clnt_dg_call(cl, proc, xargs, argsp, xresults, resultsp, utimeout)
socklen_t inlen, salen;
ssize_t recvlen = 0;
int rpc_lock_value;
- u_int32_t xid;
+ u_int32_t xid, inval, outval;
outlen = 0;
sigfillset(&newmask);
@@ -475,15 +475,23 @@ get_reply:
cu->cu_error.re_status = RPC_CANTRECV;
goto out;
}
- if (recvlen >= sizeof(u_int32_t) &&
- (cu->cu_async == TRUE ||
- *((u_int32_t *)(void *)(cu->cu_inbuf)) ==
- *((u_int32_t *)(void *)(cu->cu_outbuf))))
- inlen = (socklen_t)recvlen;
- else {
- total_time -= tv;
- goto send_again;
- }
+
+ if (recvlen < sizeof(u_int32_t)) {
+ total_time -= tv;
+ goto send_again;
+ }
+
+ if (cu->cu_async == TRUE)
+ inlen = (socklen_t)recvlen;
+ else {
+ memcpy(&inval, cu->cu_inbuf, sizeof(u_int32_t));
+ memcpy(&outval, cu->cu_outbuf, sizeof(u_int32_t));
+ if (inval != outval) {
+ total_time -= tv;
+ goto send_again;
+ }
+ inlen = (socklen_t)recvlen;
+ }
/*
* now decode and validate the response
diff --git a/src/mt_misc.c b/src/mt_misc.c
index 94bb645..4cba143 100644
--- a/src/mt_misc.c
+++ b/src/mt_misc.c
@@ -120,7 +120,7 @@ __rpc_createerr()
return (rce_addr);
}
-void __attribute ((descructor)) tsd_key_delete(void)
+void tsd_key_delete(void)
{
if (clnt_broadcast_key != -1)
thr_keydelete(clnt_broadcast_key);
diff --git a/src/rpc_generic.c b/src/rpc_generic.c
index 8219483..541275c 100644
--- a/src/rpc_generic.c
+++ b/src/rpc_generic.c
@@ -812,6 +812,11 @@ int
__rpc_sockisbound(int fd)
{
struct sockaddr_storage ss;
+ union {
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+ struct sockaddr_un usin;
+ } u_addr;
socklen_t slen;
slen = sizeof (struct sockaddr_storage);
@@ -820,17 +825,17 @@ __rpc_sockisbound(int fd)
switch (ss.ss_family) {
case AF_INET:
- return (((struct sockaddr_in *)
- (void *)&ss)->sin_port != 0);
+ memcpy(&u_addr.sin, &ss, sizeof(u_addr.sin));
+ return (u_addr.sin.sin_port != 0);
#ifdef INET6
case AF_INET6:
- return (((struct sockaddr_in6 *)
- (void *)&ss)->sin6_port != 0);
+ memcpy(&u_addr.sin6, &ss, sizeof(u_addr.sin6));
+ return (u_addr.sin6.sin6_port != 0);
#endif
case AF_LOCAL:
/* XXX check this */
- return (((struct sockaddr_un *)
- (void *)&ss)->sun_path[0] != '\0');
+ memcpy(&u_addr.usin, &ss, sizeof(u_addr.usin));
+ return (u_addr.usin.sun_path[0] != 0);
default:
break;
}