eliminate aliasing warnings in traceroute.c and udhcp/socket.c
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b3b6c8bdf2
commit
dd169e8468
@ -751,7 +751,8 @@ print(int read_len, const struct sockaddr *from, const struct sockaddr *to)
|
|||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
read_len -= ((struct ip*)recv_pkt)->ip_hl << 2;
|
struct ip *ip4packet = (struct ip*)recv_pkt;
|
||||||
|
read_len -= ip4packet->ip_hl << 2;
|
||||||
}
|
}
|
||||||
printf(" %d bytes to %s", read_len, ina);
|
printf(" %d bytes to %s", read_len, ina);
|
||||||
free(ina);
|
free(ina);
|
||||||
|
@ -36,42 +36,45 @@
|
|||||||
|
|
||||||
int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac)
|
int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac)
|
||||||
{
|
{
|
||||||
|
/* char buffer instead of bona-fide struct avoids aliasing warning */
|
||||||
|
char ifr_buf[sizeof(struct ifreq)];
|
||||||
|
struct ifreq *const ifr = (void *)ifr_buf;
|
||||||
|
|
||||||
int fd;
|
int fd;
|
||||||
struct ifreq ifr;
|
|
||||||
struct sockaddr_in *our_ip;
|
struct sockaddr_in *our_ip;
|
||||||
|
|
||||||
memset(&ifr, 0, sizeof(ifr));
|
memset(ifr, 0, sizeof(*ifr));
|
||||||
fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW);
|
fd = xsocket(AF_INET, SOCK_RAW, IPPROTO_RAW);
|
||||||
|
|
||||||
ifr.ifr_addr.sa_family = AF_INET;
|
ifr->ifr_addr.sa_family = AF_INET;
|
||||||
strncpy_IFNAMSIZ(ifr.ifr_name, interface);
|
strncpy_IFNAMSIZ(ifr->ifr_name, interface);
|
||||||
if (nip) {
|
if (nip) {
|
||||||
if (ioctl_or_perror(fd, SIOCGIFADDR, &ifr,
|
if (ioctl_or_perror(fd, SIOCGIFADDR, ifr,
|
||||||
"is interface %s up and configured?", interface)
|
"is interface %s up and configured?", interface)
|
||||||
) {
|
) {
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
our_ip = (struct sockaddr_in *) &ifr.ifr_addr;
|
our_ip = (struct sockaddr_in *) &ifr->ifr_addr;
|
||||||
*nip = our_ip->sin_addr.s_addr;
|
*nip = our_ip->sin_addr.s_addr;
|
||||||
log1("IP %s", inet_ntoa(our_ip->sin_addr));
|
log1("IP %s", inet_ntoa(our_ip->sin_addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ifindex) {
|
if (ifindex) {
|
||||||
if (ioctl_or_warn(fd, SIOCGIFINDEX, &ifr) != 0) {
|
if (ioctl_or_warn(fd, SIOCGIFINDEX, ifr) != 0) {
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
log1("Adapter index %d", ifr.ifr_ifindex);
|
log1("Adapter index %d", ifr->ifr_ifindex);
|
||||||
*ifindex = ifr.ifr_ifindex;
|
*ifindex = ifr->ifr_ifindex;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mac) {
|
if (mac) {
|
||||||
if (ioctl_or_warn(fd, SIOCGIFHWADDR, &ifr) != 0) {
|
if (ioctl_or_warn(fd, SIOCGIFHWADDR, ifr) != 0) {
|
||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
|
memcpy(mac, ifr->ifr_hwaddr.sa_data, 6);
|
||||||
log1("MAC %02x:%02x:%02x:%02x:%02x:%02x",
|
log1("MAC %02x:%02x:%02x:%02x:%02x:%02x",
|
||||||
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user