[PATCH] Fix strict-aliasing warning in resolv/res_hconf.c
Steve Ellcey
sellcey@imgtec.com
Thu May 28 16:18:00 GMT 2015
OK, so here is a complete patch based on Pedro's proposal. It compiles
fine for me on MIPS with the latest GCC. OK to checkin?
Steve Ellcey
sellcey@imgtec.com
2015-05-28 Steve Ellcey <sellcey@imgtec.com>
* resolv/res_hconf.c (_res_hconf_reorder_addrs): Use a union to
copy data from cur_ifr->ifr_addr.
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index 73942e8..b9c423e 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -410,6 +410,11 @@ _res_hconf_reorder_addrs (struct hostent *hp)
int sd, num, i;
/* Save errno. */
int save = errno;
+ union
+ {
+ struct sockaddr sa;
+ struct sockaddr_in sin;
+ } ss;
/* Initialize interface table. */
@@ -443,14 +448,14 @@ _res_hconf_reorder_addrs (struct hostent *hp)
continue;
ifaddrs[new_num_ifs].addrtype = AF_INET;
- ifaddrs[new_num_ifs].u.ipv4.addr =
- ((struct sockaddr_in *) &cur_ifr->ifr_addr)->sin_addr.s_addr;
+ ss.sa = cur_ifr->ifr_addr;
+ ifaddrs[new_num_ifs].u.ipv4.addr = ss.sin.sin_addr.s_addr;
if (__ioctl (sd, SIOCGIFNETMASK, cur_ifr) < 0)
continue;
- ifaddrs[new_num_ifs].u.ipv4.mask =
- ((struct sockaddr_in *) &cur_ifr->ifr_netmask)->sin_addr.s_addr;
+ ss.sa = cur_ifr->ifr_netmask;
+ ifaddrs[new_num_ifs].u.ipv4.mask = ss.sin.sin_addr.s_addr;
/* Now we're committed to this entry. */
++new_num_ifs;
More information about the Libc-alpha
mailing list