[前][次][番号順一覧][スレッド一覧]

ruby-changes:18350

From: usa <ko1@a...>
Date: Sun, 26 Dec 2010 01:41:25 +0900 (JST)
Subject: [ruby-changes:18350] Ruby:r30372 (trunk): * ext/socket/extconf.rb: check the existence of if_indextoname().

usa	2010-12-26 01:41:13 +0900 (Sun, 26 Dec 2010)

  New Revision: 30372

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30372

  Log:
    * ext/socket/extconf.rb: check the existence of if_indextoname().
    
    * ext/socket/option.c: yesterday's akr's commits destroyed the build of
      some unrelated platforms (such as Windows).

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/extconf.rb
    trunk/ext/socket/option.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 30371)
+++ ChangeLog	(revision 30372)
@@ -1,3 +1,10 @@
+Sun Dec 26 01:37:10 2010  NAKAMURA Usaku  <usa@r...>
+
+	* ext/socket/extconf.rb: check the existence of if_indextoname().
+
+	* ext/socket/option.c: yesterday's akr's commits destroyed the build of
+	  some unrelated platforms (such as Windows).
+
 Sat Dec 25 23:29:11 2010  Tanaka Akira  <akr@f...>
 
 	* ext/socket/option.c (inspect_ipv4_add_drop_membership): new function
Index: ext/socket/option.c
===================================================================
--- ext/socket/option.c	(revision 30371)
+++ ext/socket/option.c	(revision 30372)
@@ -433,6 +433,27 @@
  * it is not distinguishable by the size.
  */
 
+#ifdef __HAIKU__
+#define HAVE_INET_NTOP
+#endif
+#ifndef HAVE_INET_NTOP
+static char *
+inet_ntop(int af, const void *addr, char *numaddr, size_t numaddr_len)
+{
+#ifdef HAVE_INET_NTOA
+    struct in_addr in;
+    memcpy(&in.s_addr, addr, sizeof(in.s_addr));
+    snprintf(numaddr, numaddr_len, "%s", inet_ntoa(in));
+#else
+    unsigned long x = ntohl(*(unsigned long*)addr);
+    snprintf(numaddr, numaddr_len, "%d.%d.%d.%d",
+	     (int) (x>>24) & 0xff, (int) (x>>16) & 0xff,
+	     (int) (x>> 8) & 0xff, (int) (x>> 0) & 0xff);
+#endif
+    return numaddr;
+}
+#endif
+
 #if defined(IPPROTO_IP) && defined(HAVE_TYPE_STRUCT_IP_MREQ) /* 4.4BSD, GNU/Linux */
 static int
 inspect_ipv4_mreq(int level, int optname, VALUE data, VALUE ret)
@@ -457,7 +478,7 @@
 }
 #endif
 
-#if defined(IPPROTO_IP) && defined(HAVE_TYPE_STRUCT_IP_MREQN) /* GNU/Linux, FreeBSD 7 */
+#if defined(IPPROTO_IP) && defined(HAVE_TYPE_STRUCT_IP_MREQN) && defined(HAVE_IF_INDEXTONAME) /* GNU/Linux, FreeBSD 7 */
 static int
 inspect_ipv4_mreqn(int level, int optname, VALUE data, VALUE ret)
 {
@@ -500,7 +521,7 @@
 }
 #endif
 
-#if defined(IPPROTO_IP) && defined(IP_MULTICAST_IF) /* 4.4BSD, GNU/Linux */
+#if defined(IPPROTO_IP) && defined(IP_MULTICAST_IF) && defined(HAVE_TYPE_STRUCT_IP_MREQN) /* 4.4BSD, GNU/Linux */
 static int
 inspect_ipv4_multicast_if(int level, int optname, VALUE data, VALUE ret)
 {
@@ -523,7 +544,7 @@
 }
 #endif
 
-#if defined(IPPROTO_IPV6) && defined(HAVE_TYPE_STRUCT_IPV6_MREQ) /* POSIX, RFC 3493 */
+#if defined(IPPROTO_IPV6) && defined(HAVE_TYPE_STRUCT_IPV6_MREQ) && defined(HAVE_IF_INDEXTONAME) /* POSIX, RFC 3493 */
 static int
 inspect_ipv6_mreq(int level, int optname, VALUE data, VALUE ret)
 {
@@ -741,7 +762,7 @@
 #        if defined(IPPROTO_IP)
           case IPPROTO_IP:
             switch (optname) {
-#            if defined(IP_MULTICAST_IF) /* 4.4BSD, GNU/Linux */
+#            if defined(IP_MULTICAST_IF) && defined(HAVE_TYPE_STRUCT_IP_MREQN) /* 4.4BSD, GNU/Linux */
               case IP_MULTICAST_IF: inspected = inspect_ipv4_multicast_if(level, optname, data, ret); break;
 #            endif
 #            if defined(IP_ADD_MEMBERSHIP) /* 4.4BSD, GNU/Linux */
@@ -766,10 +787,10 @@
 #            if defined(IPV6_MULTICAST_LOOP) /* POSIX */
               case IPV6_MULTICAST_LOOP: inspected = inspect_uint(level, optname, data, ret); break;
 #            endif
-#            if defined(IPV6_JOIN_GROUP) /* POSIX */
+#            if defined(IPV6_JOIN_GROUP) && defined(HAVE_IF_INDEXTONAME) /* POSIX */
               case IPV6_JOIN_GROUP: inspected = inspect_ipv6_mreq(level, optname, data, ret); break;
 #            endif
-#            if defined(IPV6_LEAVE_GROUP) /* POSIX */
+#            if defined(IPV6_LEAVE_GROUP) && defined(HAVE_IF_INDEXTONAME) /* POSIX */
               case IPV6_LEAVE_GROUP: inspected = inspect_ipv6_mreq(level, optname, data, ret); break;
 #            endif
 #            if defined(IPV6_UNICAST_HOPS) /* POSIX */
Index: ext/socket/extconf.rb
===================================================================
--- ext/socket/extconf.rb	(revision 30371)
+++ ext/socket/extconf.rb	(revision 30372)
@@ -340,6 +340,8 @@
 have_header("ucred.h", headers)
 have_func("getpeerucred")
 
+have_func("if_indextoname")
+
 have_type("struct ip_mreq", headers) # 4.4BSD
 have_type("struct ip_mreqn", headers) # Linux 2.4
 have_type("struct ipv6_mreq", headers) # RFC 3493

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]