ifplugd: eliminate aliasing warnings
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 20 Jan 2011 00:20:36 +0000 (01:20 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 20 Jan 2011 00:20:36 +0000 (01:20 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ifplugd.c

index 58f56dbf15a6546a27d2058dc305206ab705a5a9..3b59a63ff26c93d9b135b469943e79ade3b6bfdb 100644 (file)
@@ -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;
        }