diff options
author | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2011-10-14 20:10:29 +0159 |
---|---|---|
committer | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2011-10-27 21:59:45 +0159 |
commit | a65f94ffa5e7597388ff0b56cf6824e476668855 (patch) | |
tree | 887dc0f4bc700752434ad8800da8bd75ff84fd35 | |
parent | 52f36a944337afcb6bdc97f64332386e0bc60b85 (diff) | |
download | bionic-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.c | 25 |
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 |