[git commit master 1/1] ifplugd: eliminate aliasing warnings

Denys Vlasenko vda.linux at googlemail.com
Thu Jan 20 00:20:36 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=53f30b41ec252d9973719b349a644477e72e1a09
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/ifplugd.c |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 58f56db..3b59a63 100644
--- a/networking/ifplugd.c
+++ b/networking/ifplugd.c
@@ -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;
 	}
 
-- 
1.7.3.4



More information about the busybox-cvs mailing list