summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorRalf Corsepius <ralf.corsepius@rtems.org>2011-11-30 07:00:47 +0000
committerRalf Corsepius <ralf.corsepius@rtems.org>2011-11-30 07:00:47 +0000
commit2fc9706a567c4c90eea256b12bf73350bd063ed3 (patch)
tree5ead56d2d8a70ad09305a926c61015af37366e70 /cpukit
parent2011-11-28 Werner Almesberger <werner@almesberger.net> (diff)
downloadrtems-2fc9706a567c4c90eea256b12bf73350bd063ed3.tar.bz2
2011-11-30 Ralf Corsépius <ralf.corsepius@rtems.org>
* librpc/src/rpc/clnt_udp.c (struct cu_data): Introduce unions _cu_inbuf, _cu_outbuf to avoid aliasing.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/ChangeLog5
-rw-r--r--cpukit/librpc/src/rpc/clnt_udp.c14
2 files changed, 16 insertions, 3 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog
index 29343e7694..51e8f21539 100644
--- a/cpukit/ChangeLog
+++ b/cpukit/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-30 Ralf Corsépius <ralf.corsepius@rtems.org>
+
+ * librpc/src/rpc/clnt_udp.c (struct cu_data):
+ Introduce unions _cu_inbuf, _cu_outbuf to avoid aliasing.
+
2011-11-28 Werner Almesberger <werner@almesberger.net>
PR 1961/cpukit
diff --git a/cpukit/librpc/src/rpc/clnt_udp.c b/cpukit/librpc/src/rpc/clnt_udp.c
index aeace640a8..369da95f2d 100644
--- a/cpukit/librpc/src/rpc/clnt_udp.c
+++ b/cpukit/librpc/src/rpc/clnt_udp.c
@@ -88,9 +88,17 @@ struct cu_data {
XDR cu_outxdrs;
u_int cu_xdrpos;
u_int cu_sendsz; /* send size */
- char *cu_outbuf;
+ union {
+ u_int32_t *i32;
+ char *c;
+ } _cu_outbuf;
+#define cu_outbuf _cu_outbuf.c
u_int cu_recvsz; /* recv size */
- char cu_inbuf[1];
+ union {
+ u_int32_t *i32;
+ char c[1];
+ } _cu_inbuf;
+#define cu_inbuf _cu_inbuf.c
};
/*
@@ -352,7 +360,7 @@ send_again:
if (inlen < sizeof(u_int32_t))
continue;
/* see if reply transaction id matches sent id */
- if (*((u_int32_t *)(cu->cu_inbuf)) != *((u_int32_t *)(cu->cu_outbuf)))
+ if (*(cu->_cu_inbuf.i32) != *(cu->_cu_outbuf.i32))
continue;
/* we now assume we have the proper reply */
break;