ifplugd: eliminate aliasing warnings
No binary (build failed)
—
(log yok)
| @@ -131,18 +131,20 @@ static int network_ioctl(int request, void* data, const char *errmsg) | |
| static smallint detect_link_mii(void) | |
| { | |
| - | struct ifreq ifreq; |
| - | struct mii_ioctl_data *mii = (void *)&ifreq.ifr_data; |
| + | /* char buffer instead of bona-fide struct avoids aliasing warning */ |
| + | char buf[sizeof(struct ifreq)]; |
| + | struct ifreq *ifreq = (void *)buf; |
| + | struct mii_ioctl_data *mii = (void *)&ifreq->ifr_data; |
| - | set_ifreq_to_ifname(&ifreq); |
| + | set_ifreq_to_ifname(ifreq); |
| - | if (network_ioctl(SIOCGMIIPHY, &ifreq, "SIOCGMIIPHY") < 0) { |
| + | if (network_ioctl(SIOCGMIIPHY, ifreq, "SIOCGMIIPHY") < 0) { |
| return IFSTATUS_ERR; | |
| } | |
| mii->reg_num = 1; | |
| - | if (network_ioctl(SIOCGMIIREG, &ifreq, "SIOCGMIIREG") < 0) { |
| + | if (network_ioctl(SIOCGMIIREG, ifreq, "SIOCGMIIREG") < 0) { |
| return IFSTATUS_ERR; | |
| } | |
| @@ -151,18 +153,20 @@ static smallint detect_link_mii(void) | |
| static smallint detect_link_priv(void) | |
| { | |
| - | struct ifreq ifreq; |
| - | struct mii_ioctl_data *mii = (void *)&ifreq.ifr_data; |
| + | /* char buffer instead of bona-fide struct avoids aliasing warning */ |
| + | char buf[sizeof(struct ifreq)]; |
| + | struct ifreq *ifreq = (void *)buf; |
| + | struct mii_ioctl_data *mii = (void *)&ifreq->ifr_data; |
| - | set_ifreq_to_ifname(&ifreq); |
| + | set_ifreq_to_ifname(ifreq); |
| - | if (network_ioctl(SIOCDEVPRIVATE, &ifreq, "SIOCDEVPRIVATE") < 0) { |
| + | if (network_ioctl(SIOCDEVPRIVATE, ifreq, "SIOCDEVPRIVATE") < 0) { |
| return IFSTATUS_ERR; | |
| } | |
| mii->reg_num = 1; | |
| - | if (network_ioctl(SIOCDEVPRIVATE+1, &ifreq, "SIOCDEVPRIVATE+1") < 0) { |
| + | if (network_ioctl(SIOCDEVPRIVATE+1, ifreq, "SIOCDEVPRIVATE+1") < 0) { |
| return IFSTATUS_ERR; | |
| } | |