patches/pidgin-14-ifaddrs.diff
author yanjing
Tue, 27 Mar 2012 07:40:06 +0000
branchgnome-2-30-s11update
changeset 22350 08957601a465
parent 18006 24bd68a5c0c9
permissions -rw-r--r--
2012-03-27 Jerry Guo <[email protected]> Update the fix for 7154328 * base-specs/pidgin.spec: * patches/pidgin-14-ifaddrs.diff: * patches/pidgin-17-compile-ifaddrs.diff: * specs/SUNWgnome-im-client.spec: M base-specs/pidgin.spec D patches/pidgin-17-compile-ifaddrs.diff M patches/pidgin-14-ifaddrs.diff M ChangeLog M specs/SUNWgnome-im-client.spec

--- pidgin-2.7.0/libpurple/network.c.old	2010-05-19 16:14:46.440830715 +0800
+++ pidgin-2.7.0/libpurple/network.c	2010-05-19 16:38:25.005674810 +0800
@@ -57,6 +57,16 @@
 #include <idna.h>
 #endif
 
+/* Since OpenSolaris build 137, RFC2553 is supported
+ * so ifa_addr member of "struct ifaddrs" has type
+ * "struct sockaddr_storage" 
+ */
+#ifdef HAVE_STRUCT_IFADDRS_IFA_ADDR__SS_FAMILY
+#define ADDR_FAMILY_MEMBER ss_family
+#else
+#define ADDR_FAMILY_MEMBER sa_family
+#endif
+
 /*
  * Calling sizeof(struct ifreq) isn't always correct on
  * Mac OS X (and maybe others).
@@ -219,7 +229,7 @@
 	}
 
 	for (ifa = start; ifa; ifa = ifa->ifa_next) {
-		int family = ifa->ifa_addr ? ifa->ifa_addr->sa_family : AF_UNSPEC;
+		int family = ifa->ifa_addr ? ifa->ifa_addr->ADDR_FAMILY_MEMBER: AF_UNSPEC;
 		char host[INET6_ADDRSTRLEN];
 		const char *tmp = NULL;
 
@@ -265,7 +275,7 @@
 		ifr = (struct ifreq *)tmp;
 		tmp += HX_SIZE_OF_IFREQ(*ifr);
 
-		if (ifr->ifr_addr.sa_family == AF_INET) {
+		if (ifr->ifr_addr.ADDR_FAMILY_MEMBER == AF_INET) {
 			struct sockaddr_in *sinptr = (struct sockaddr_in *)&ifr->ifr_addr;
 
 			inet_ntop(AF_INET, &sinptr->sin_addr, dst,