aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-10-14 20:10:29 +0159
committerBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2011-10-27 21:59:45 +0159
commita65f94ffa5e7597388ff0b56cf6824e476668855 (patch)
tree887dc0f4bc700752434ad8800da8bd75ff84fd35
parent52f36a944337afcb6bdc97f64332386e0bc60b85 (diff)
downloadbionic-linaro_android_2.3.5.tar.gz
bionic: Fix aliasing violations for gcc 4.5.xlinaro_android_2.3.7linaro_android_2.3.5
This fixes aliasing violations that are automatically fixed by gcc 4.6, but detected as errors with gcc 4.5 with -Werror=strict-aliasing, causing the build of gcc 4.5 based arm-linux-androideabi- toolchains to fail https://android-build.linaro.org/jenkins/job/linaro-android_toolchain-4.5-linaro-master/12/consoleText Signed-off-by: Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> Change-Id: Ie182b999d44a4122c51324275a1340810dae5fba
-rw-r--r--libc/netbsd/resolv/res_send.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/libc/netbsd/resolv/res_send.c b/libc/netbsd/resolv/res_send.c
index 696f8cfeb..b5b648365 100644
--- a/libc/netbsd/resolv/res_send.c
+++ b/libc/netbsd/resolv/res_send.c
@@ -159,6 +159,7 @@ typedef union {
struct sockaddr sa;
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
+ struct sockaddr_storage stor;
} _sockaddr_union;
static int
@@ -396,7 +397,7 @@ res_nsend(res_state statp,
*/
if (EXT(statp).nscount != 0) {
int needclose = 0;
- struct sockaddr_storage peer;
+ _sockaddr_union peer;
socklen_t peerlen;
if (EXT(statp).nscount != statp->nscount)
@@ -412,13 +413,13 @@ res_nsend(res_state statp,
if (EXT(statp).nssocks[ns] == -1)
continue;
- peerlen = sizeof(peer);
+ peerlen = sizeof(struct sockaddr_storage);
if (getsockname(EXT(statp).nssocks[ns],
- (struct sockaddr *)(void *)&peer, &peerlen) < 0) {
+ &peer.sa, &peerlen) < 0) {
needclose++;
break;
}
- if (!sock_eq((struct sockaddr *)(void *)&peer,
+ if (!sock_eq(&peer.sa,
get_nsaddr(statp, (size_t)ns))) {
needclose++;
break;
@@ -692,12 +693,12 @@ send_vc(res_state statp,
/* Are we still talking to whom we want to talk to? */
if (statp->_vcsock >= 0 && (statp->_flags & RES_F_VC) != 0) {
- struct sockaddr_storage peer;
- socklen_t size = sizeof peer;
+ _sockaddr_union peer;
+ socklen_t size = sizeof(struct sockaddr_storage);
if (getpeername(statp->_vcsock,
- (struct sockaddr *)(void *)&peer, &size) < 0 ||
- !sock_eq((struct sockaddr *)(void *)&peer, nsap)) {
+ &peer.sa, &size) < 0 ||
+ !sock_eq(&peer.sa, nsap)) {
res_nclose(statp);
statp->_flags &= ~RES_F_VC;
}
@@ -870,7 +871,7 @@ send_dg(res_state statp,
int nsaplen;
struct timespec now, timeout, finish;
fd_set dsmask;
- struct sockaddr_storage from;
+ _sockaddr_union from;
socklen_t fromlen;
int resplen, seconds, n, s;
@@ -976,9 +977,9 @@ send_dg(res_state statp,
return (0);
}
errno = 0;
- fromlen = sizeof(from);
+ fromlen = sizeof(struct sockaddr_storage);
resplen = recvfrom(s, (char*)ans, (size_t)anssiz,0,
- (struct sockaddr *)(void *)&from, &fromlen);
+ &from.sa, &fromlen);
if (resplen <= 0) {
Perror(statp, stderr, "recvfrom", errno);
res_nclose(statp);
@@ -1009,7 +1010,7 @@ send_dg(res_state statp,
goto wait;
}
if (!(statp->options & RES_INSECURE1) &&
- !res_ourserver_p(statp, (struct sockaddr *)(void *)&from)) {
+ !res_ourserver_p(statp, &from.sa)) {
/*
* response from wrong server? ignore it.
* XXX - potential security hazard could