[Glibc-bsd-commits] r5668 - trunk/glibc-ports/kfreebsd

stevenc-guest at alioth.debian.org stevenc-guest at alioth.debian.org
Sat Oct 25 17:49:40 UTC 2014


Author: stevenc-guest
Date: 2014-10-25 17:49:40 +0000 (Sat, 25 Oct 2014)
New Revision: 5668

Modified:
   trunk/glibc-ports/kfreebsd/ifaddrs.c
Log:
Expand the workaround added in r5651:
  * Position of sockaddr_dl is actually correct for 9.0, not 10.1
  * Keep the existing workaround in place in case struct size changes
    again in future.


Modified: trunk/glibc-ports/kfreebsd/ifaddrs.c
===================================================================
--- trunk/glibc-ports/kfreebsd/ifaddrs.c	2014-10-25 17:20:39 UTC (rev 5667)
+++ trunk/glibc-ports/kfreebsd/ifaddrs.c	2014-10-25 17:49:40 UTC (rev 5668)
@@ -147,13 +147,16 @@
 			if (ifm->ifm_addrs & RTA_IFP) {
 				idx = ifm->ifm_index;
 				++icnt;
-				/* XXX: smooth over a kfreebsd 9.0->10.1 ABI break:
-				  sizeof(struct rt_msghdr) is correct for 10.1 kernel */
 				dl = (struct sockaddr_dl *)(void *)(ifm + 1);
+				/* XXX: smooth over a kfreebsd 9.0->10.1 ABI break */
 				if (rtm->rtm_msglen == 152) {
 					/* on kfreebsd-i386 9.0, struct rt_msghdr is 96 bytes */
 					dl = (struct sockaddr_dl *)((char *)ifm + 96);
 				}
+				if (rtm->rtm_msglen == 156) {
+					/* on kfreebsd-i386 10.1, struct rt_msghdr is 100 bytes */
+					dl = (struct sockaddr_dl *)((char *)ifm + 100);
+				}
 				dcnt += SA_RLEN((struct sockaddr *)(void*)dl) +
 				    ALIGNBYTES;
 #ifdef	HAVE_IFM_DATA
@@ -240,13 +243,16 @@
 			ifm = (struct if_msghdr *)(void *)rtm;
 			if (ifm->ifm_addrs & RTA_IFP) {
 				idx = ifm->ifm_index;
-				/* XXX: smooth over a kfreebsd 9.0->10.1 ABI break:
-				  sizeof(struct rt_msghdr) is correct for 10.1 kernel */
 				dl = (struct sockaddr_dl *)(void *)(ifm + 1);
+				/* XXX: smooth over a kfreebsd 9.0->10.1 ABI break */
 				if (rtm->rtm_msglen == 152) {
 					/* on kfreebsd-i386 9.0, struct rt_msghdr is 96 bytes */
 					dl = (struct sockaddr_dl *)((char *)ifm + 96);
 				}
+				if (rtm->rtm_msglen == 156) {
+					/* on kfreebsd-i386 10.1, struct rt_msghdr is 100 bytes */
+					dl = (struct sockaddr_dl *)((char *)ifm + 100);
+				}
 
 				cif = ift;
 				ift->ifa_name = names;




More information about the Glibc-bsd-commits mailing list