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

ruby-changes:14379

From: nobu <ko1@a...>
Date: Thu, 31 Dec 2009 05:57:07 +0900 (JST)
Subject: [ruby-changes:14379] Ruby:r26209 (ruby_1_8, trunk): * ext/socket/extconf.rb: fix for wide-getaddrinfo option.

nobu	2009-12-31 05:56:41 +0900 (Thu, 31 Dec 2009)

  New Revision: 26209

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

  Log:
    * ext/socket/extconf.rb: fix for wide-getaddrinfo option.
    
    * ext/socket/addrinfo.c: rename {addr,name}info functions to ensure
      those are used on darwin.

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/ext/socket/addrinfo.h
    branches/ruby_1_8/ext/socket/depend
    branches/ruby_1_8/ext/socket/extconf.rb
    branches/ruby_1_8/ext/socket/getaddrinfo.c
    branches/ruby_1_8/ext/socket/getnameinfo.c
    branches/ruby_1_8/ext/socket/socket.c
    trunk/ChangeLog
    trunk/ext/socket/addrinfo.h
    trunk/ext/socket/depend
    trunk/ext/socket/extconf.rb
    trunk/ext/socket/getaddrinfo.c
    trunk/ext/socket/getnameinfo.c
    trunk/ext/socket/rubysocket.h
    trunk/ext/socket/socket.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 26208)
+++ ChangeLog	(revision 26209)
@@ -1,3 +1,10 @@
+Thu Dec 31 05:56:38 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/socket/extconf.rb: fix for wide-getaddrinfo option.
+
+	* ext/socket/addrinfo.c: rename {addr,name}info functions to ensure
+	  those are used on darwin.
+
 Thu Dec 31 03:27:53 2009  NAKAMURA Usaku  <usa@r...>
 
 	* thread_win32.c (native_thread_destroy): decreased the probability of
Index: ext/socket/rubysocket.h
===================================================================
--- ext/socket/rubysocket.h	(revision 26208)
+++ ext/socket/rubysocket.h	(revision 26209)
@@ -97,9 +97,7 @@
  */
 #define pseudo_AF_FTIP pseudo_AF_RTIP
 
-#ifndef HAVE_GETADDRINFO
-# include "addrinfo.h"
-#endif
+#include "addrinfo.h"
 #include "sockport.h"
 
 #ifndef NI_MAXHOST
Index: ext/socket/depend
===================================================================
--- ext/socket/depend	(revision 26208)
+++ ext/socket/depend	(revision 26209)
@@ -1,6 +1,6 @@
 SOCK_HEADERS = $(srcdir)/rubysocket.h $(hdrdir)/ruby/ruby.h $(arch_hdrdir)/ruby/config.h \
 	$(hdrdir)/ruby/defines.h $(hdrdir)/ruby/io.h \
-	$(srcdir)/sockport.h constdefs.h
+	$(srcdir)/addrinfo.h $(srcdir)/sockport.h constdefs.h
 
 init.o: init.c $(SOCK_HEADERS)
 constants.o: constants.c constdefs.c $(SOCK_HEADERS)
Index: ext/socket/getaddrinfo.c
===================================================================
--- ext/socket/getaddrinfo.c	(revision 26208)
+++ ext/socket/getaddrinfo.c	(revision 26209)
@@ -83,10 +83,6 @@
 #include "addrinfo.h"
 #include "sockport.h"
 
-#if defined(__KAME__) && defined(INET6)
-# define FAITH
-#endif
-
 #define SUCCESS 0
 #define ANY 0
 #define YES 1
@@ -482,11 +478,7 @@
 				break;
 #ifdef INET6
 			case AF_INET6:
-#ifdef HAVE_ADDR8
-				pfx = ((struct in6_addr *)pton)->s6_addr8[0];
-#else
 				pfx = ((struct in6_addr *)pton)->s6_addr[0];
-#endif
 				if (pfx == 0 || pfx == 0xfe || pfx == 0xff)
 					pai->ai_flags &= ~AI_CANONNAME;
 				break;
@@ -651,9 +643,10 @@
 
 			GET_AI(cur->ai_next, &afdl[N_INET6], ap, port);
 			in6 = &((struct sockaddr_in6 *)cur->ai_next->ai_addr)->sin6_addr;
-			memcpy(&in6->s6_addr32[0], &faith_prefix,
-			    sizeof(struct in6_addr) - sizeof(struct in_addr));
-			memcpy(&in6->s6_addr32[3], ap, sizeof(struct in_addr));
+			memcpy(&in6->s6_addr, &faith_prefix,
+			       sizeof(struct in6_addr) - sizeof(struct in_addr));
+			memcpy(&in6->s6_addr + sizeof(struct in_addr), ap,
+			       sizeof(struct in_addr));
 		} else
 #endif /* FAITH */
 		GET_AI(cur->ai_next, afd, ap, port);
Index: ext/socket/extconf.rb
===================================================================
--- ext/socket/extconf.rb	(revision 26208)
+++ ext/socket/extconf.rb	(revision 26209)
@@ -115,8 +115,8 @@
   have_struct_member('struct msghdr', 'msg_accrights', ['sys/types.h', 'sys/socket.h'])
 end
 
-getaddr_info_ok = enable_config("wide-getaddrinfo") do
-  checking_for("wide getaddrinfo") {try_run(<<EOF)}
+getaddr_info_ok = (enable_config("wide-getaddrinfo") && :wide) ||
+  (checking_for("wide getaddrinfo") {try_run(<<EOF)} && :os)
 #{cpp_include(headers)}
 #include <stdlib.h>
 
@@ -224,7 +224,6 @@
   exit(EXIT_FAILURE);
 }
 EOF
-end
 if ipv6 and not getaddr_info_ok
   abort <<EOS
 
@@ -249,6 +248,23 @@
 EOS
 end
 
+have_type("struct addrinfo", headers)
+have_func("freehostent")
+have_func("freeaddrinfo")
+if /haiku/ !~ RUBY_PLATFORM and have_func("gai_strerror")
+  if checking_for("gai_strerror() returns const pointer") {!try_compile(<<EOF)}
+#{cpp_include(headers)}
+#include <stdlib.h>
+void
+conftest_gai_strerror_is_const()
+{
+    *gai_strerror(0) = 0;
+}
+EOF
+    $defs << "-DGAI_STRERROR_CONST"
+  end
+end
+
 $objs = [
   "init.#{$OBJEXT}",
   "constants.#{$OBJEXT}",
@@ -266,10 +282,14 @@
   "raddrinfo.#{$OBJEXT}"
 ]
 
-unless getaddr_info_ok and have_func("getnameinfo", headers) and have_func("getaddrinfo", headers)
+if getaddr_info_ok == :wide or
+    !have_func("getnameinfo", headers) or !have_func("getaddrinfo", headers)
   if have_struct_member("struct in6_addr", "s6_addr8", headers)
-    $defs[-1] = "-DHAVE_ADDR8"
+    $defs[-1] = "s6_addr=s6_addr8"
   end
+  if ipv6 == "kame" && have_struct_member("struct in6_addr", "s6_addr32", headers)
+    $defs[-1] = "-DFAITH"
+  end
   $CPPFLAGS="-I. "+$CPPFLAGS
   $objs += ["getaddrinfo.#{$OBJEXT}"]
   $objs += ["getnameinfo.#{$OBJEXT}"]
@@ -277,19 +297,6 @@
   have_func("inet_ntop") or have_func("inet_ntoa")
   have_func("inet_pton") or have_func("inet_aton")
   have_func("getservbyport")
-  if have_func("gai_strerror")
-    unless checking_for("gai_strerror() returns const pointer") {!try_compile(<<EOF)}
-#{cpp_include(headers)}
-#include <stdlib.h>
-void
-conftest_gai_strerror_is_const()
-{
-    *gai_strerror(0) = 0;
-}
-EOF
-      $defs << "-DGAI_STRERROR_CONST"
-    end
-  end
   have_header("arpa/nameser.h")
   have_header("resolv.h")
 end
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 26208)
+++ ext/socket/socket.c	(revision 26209)
@@ -904,7 +904,7 @@
 	ptr = (char*)&((struct sockaddr_in*)addr)->sin_addr.s_addr;
 	len = sizeof(((struct sockaddr_in*)addr)->sin_addr.s_addr);
 	break;
-#ifdef INET6
+#ifdef AF_INET6
       case AF_INET6:
 	ptr = (char*)&((struct sockaddr_in6*)addr)->sin6_addr.s6_addr;
 	len = sizeof(((struct sockaddr_in6*)addr)->sin6_addr.s6_addr);
@@ -1414,7 +1414,7 @@
 static VALUE
 sockaddr_obj(struct sockaddr *addr)
 {
-    socklen_t len;
+    size_t len;
 #if defined(AF_INET6) && defined(__KAME__)
     struct sockaddr_in6 addr6;
 #endif
Index: ext/socket/addrinfo.h
===================================================================
--- ext/socket/addrinfo.h	(revision 26208)
+++ ext/socket/addrinfo.h	(revision 26209)
@@ -29,7 +29,6 @@
 
 #ifndef ADDR_INFO_H
 #define ADDR_INFO_H
-#ifndef HAVE_GETADDRINFO
 
 /* special compatibility hack */
 #undef EAI_ADDRFAMILY
@@ -62,17 +61,6 @@
 #undef NI_NUMERICSERV
 #undef NI_DGRAM
 
-#undef addrinfo
-#define addrinfo addrinfo__compat
-#undef getaddrinfo
-#define getaddrinfo getaddrinfo__compat
-#undef getnameinfo
-#define getnameinfo getnameinfo__compat
-#undef freehostent
-#define freehostent freehostent__compat
-#undef freeaddrinfo
-#define freeaddrinfo freeaddrinfo__compat
-
 #ifndef __P
 # ifdef HAVE_PROTOTYPES
 #  define __P(args) args
@@ -111,6 +99,7 @@
 #define	AI_NUMERICSERV	0x00000008 /* prevent service name resolution */
 /* valid flags for addrinfo */
 #ifndef __HAIKU__
+#undef AI_MASK
 #define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV)
 #endif
 
@@ -138,6 +127,7 @@
 #define	NI_NUMERICSERV	0x00000008
 #define	NI_DGRAM	0x00000010
 
+#ifndef HAVE_TYPE_STRUCT_ADDRINFO
 struct addrinfo {
 	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
 	int	ai_family;	/* PF_xxx */
@@ -148,7 +138,25 @@
 	struct sockaddr *ai_addr;	/* binary address */
 	struct addrinfo *ai_next;	/* next structure in linked list */
 };
+#endif
 
+#ifndef HAVE_GETADDRINFO
+#undef getaddrinfo
+#define getaddrinfo getaddrinfo__compat
+#endif
+#ifndef HAVE_GETNAMEINFO
+#undef getnameinfo
+#define getnameinfo getnameinfo__compat
+#endif
+#ifndef HAVE_FREEHOSTENT
+#undef freehostent
+#define freehostent freehostent__compat
+#endif
+#ifndef HAVE_FREEADDRINFO
+#undef freeaddrinfo
+#define freeaddrinfo freeaddrinfo__compat
+#endif
+
 extern int getaddrinfo __P((
 	const char *hostname, const char *servname,
 	const struct addrinfo *hints,
@@ -156,21 +164,20 @@
 
 extern int getnameinfo __P((
 	const struct sockaddr *sa,
-	size_t salen,
+	socklen_t salen,
 	char *host,
-	size_t hostlen,
+	socklen_t hostlen,
 	char *serv,
-	size_t servlen,
+	socklen_t servlen,
 	int flags));
 
 extern void freehostent __P((struct hostent *));
 extern void freeaddrinfo __P((struct addrinfo *));
-#if defined __UCLIBC__
+extern
+#ifdef GAI_STRERROR_CONST
 const
 #endif
-#ifndef __HAIKU__
-extern char *gai_strerror __P((int));
-#endif
+char *gai_strerror __P((int));
 
 /* In case there is no definition of offsetof() provided - though any proper
 Standard C system should have one. */
@@ -180,4 +187,3 @@
 #endif
 
 #endif
-#endif
Index: ext/socket/getnameinfo.c
===================================================================
--- ext/socket/getnameinfo.c	(revision 26208)
+++ ext/socket/getnameinfo.c	(revision 26209)
@@ -136,7 +136,7 @@
 #endif
 
 int
-getnameinfo(const struct sockaddr *sa, size_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags)
+getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
 {
 	struct afd *afd;
 	struct hostent *hp;
Index: ruby_1_8/ext/socket/depend
===================================================================
--- ruby_1_8/ext/socket/depend	(revision 26208)
+++ ruby_1_8/ext/socket/depend	(revision 26209)
@@ -1,3 +1,3 @@
-socket.o : socket.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/rubyio.h $(hdrdir)/rubysig.h sockport.h
+socket.o : socket.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/rubyio.h $(hdrdir)/rubysig.h addrinfo.h sockport.h
 getnameinfo.o: getnameinfo.c $(topdir)/config.h addrinfo.h sockport.h
 getaddrinfo.o: getaddrinfo.c $(topdir)/config.h addrinfo.h sockport.h
Index: ruby_1_8/ext/socket/getaddrinfo.c
===================================================================
--- ruby_1_8/ext/socket/getaddrinfo.c	(revision 26208)
+++ ruby_1_8/ext/socket/getaddrinfo.c	(revision 26209)
@@ -87,10 +87,6 @@
 #include "addrinfo.h"
 #include "sockport.h"
 
-#if defined(__KAME__) && defined(INET6)
-# define FAITH
-#endif
-
 #define SUCCESS 0
 #define ANY 0
 #define YES 1
@@ -493,11 +489,7 @@
 				break;
 #ifdef INET6
 			case AF_INET6:
-#ifdef HAVE_ADDR8
-				pfx = ((struct in6_addr *)pton)->s6_addr8[0];
-#else
 				pfx = ((struct in6_addr *)pton)->s6_addr[0];
-#endif
 				if (pfx == 0 || pfx == 0xfe || pfx == 0xff)
 					pai->ai_flags &= ~AI_CANONNAME;
 				break;
@@ -673,9 +665,10 @@
 
 			GET_AI(cur->ai_next, &afdl[N_INET6], ap, port);
 			in6 = &((struct sockaddr_in6 *)cur->ai_next->ai_addr)->sin6_addr;
-			memcpy(&in6->s6_addr32[0], &faith_prefix,
-			    sizeof(struct in6_addr) - sizeof(struct in_addr));
-			memcpy(&in6->s6_addr32[3], ap, sizeof(struct in_addr));
+			memcpy(&in6->s6_addr, &faith_prefix,
+			       sizeof(struct in6_addr) - sizeof(struct in_addr));
+			memcpy(&in6->s6_addr + sizeof(struct in_addr), ap,
+			       sizeof(struct in_addr));
 		} else
 #endif /* FAITH */
 		GET_AI(cur->ai_next, afd, ap, port);
Index: ruby_1_8/ext/socket/extconf.rb
===================================================================
--- ruby_1_8/ext/socket/extconf.rb	(revision 26208)
+++ ruby_1_8/ext/socket/extconf.rb	(revision 26209)
@@ -120,8 +120,8 @@
   have_struct_member('struct msghdr', 'msg_accrights', ['sys/types.h', 'sys/socket.h'])
 end
 
-getaddr_info_ok = enable_config("wide-getaddrinfo") do
-  checking_for("wide getaddrinfo") {try_run(<<EOF)}
+getaddr_info_ok = (enable_config("wide-getaddrinfo") && :wide) ||
+  (checking_for("wide getaddrinfo") {try_run(<<EOF)} && :os)
 #{cpp_include(headers)}
 #include <stdlib.h>
 
@@ -224,7 +224,6 @@
   exit(EXIT_FAILURE);
 }
 EOF
-end
 if ipv6 and not getaddr_info_ok
   abort <<EOS
 
@@ -249,31 +248,39 @@
 EOS
 end
 
+have_type("struct addrinfo", headers)
+have_func("freehostent")
+have_func("freeaddrinfo")
+if have_func("gai_strerror")
+  if checking_for("gai_strerror() returns const pointer") {!try_compile(<<EOF)}
+#{cpp_include(headers)}
+#include <stdlib.h>
+void
+conftest_gai_strerror_is_const()
+{
+    *gai_strerror(0) = 0;
+}
+EOF
+    $defs << "-DGAI_STRERROR_CONST"
+  end
+end
+
 $objs = ["socket.#{$OBJEXT}"]
 
-unless getaddr_info_ok and have_func("getnameinfo", "netdb.h") and have_func("getaddrinfo", "netdb.h")
+if getaddr_info_ok == :wide or
+    !have_func("getnameinfo", headers) or !have_func("getaddrinfo", headers)
   if have_struct_member("struct in6_addr", "s6_addr8", headers)
-    $defs[-1] = "-DHAVE_ADDR8"
+    $defs[-1] = "s6_addr=s6_addr8"
   end
+  if ipv6 == "kame" && have_struct_member("struct in6_addr", "s6_addr32", headers)
+    $defs[-1] = "-DFAITH"
+  end
   $CPPFLAGS="-I. "+$CPPFLAGS
   $objs += ["getaddrinfo.#{$OBJEXT}"]
   $objs += ["getnameinfo.#{$OBJEXT}"]
   have_func("inet_ntop") or have_func("inet_ntoa")
   have_func("inet_pton") or have_func("inet_aton")
   have_func("getservbyport")
-  if have_func("gai_strerror")
-    unless checking_for("gai_strerror() returns const pointer") {!try_compile(<<EOF)}
-#{cpp_include(headers)}
-#include <stdlib.h>
-void
-conftest_gai_strerror_is_const()
-{
-    *gai_strerror(0) = 0;
-}
-EOF
-      $defs << "-DGAI_STRERROR_CONST"
-    end
-  end
   have_header("arpa/nameser.h")
   have_header("resolv.h")
 end
Index: ruby_1_8/ext/socket/socket.c
===================================================================
--- ruby_1_8/ext/socket/socket.c	(revision 26208)
+++ ruby_1_8/ext/socket/socket.c	(revision 26209)
@@ -69,9 +69,7 @@
 #ifndef EWOULDBLOCK
 #define EWOULDBLOCK EAGAIN
 #endif
-#ifndef HAVE_GETADDRINFO
-# include "addrinfo.h"
-#endif
+#include "addrinfo.h"
 #include "sockport.h"
 
 #if defined(__vms)
Index: ruby_1_8/ext/socket/addrinfo.h
===================================================================
--- ruby_1_8/ext/socket/addrinfo.h	(revision 26208)
+++ ruby_1_8/ext/socket/addrinfo.h	(revision 26209)
@@ -29,7 +29,6 @@
 
 #ifndef ADDR_INFO_H
 #define ADDR_INFO_H
-#ifndef HAVE_GETADDRINFO
 
 /* special compatibility hack */
 #undef EAI_ADDRFAMILY
@@ -61,17 +60,6 @@
 #undef NI_NUMERICSERV
 #undef NI_DGRAM
 
-#undef addrinfo
-#define addrinfo addrinfo__compat
-#undef getaddrinfo
-#define getaddrinfo getaddrinfo__compat
-#undef getnameinfo
-#define getnameinfo getnameinfo__compat
-#undef freehostent
-#define freehostent freehostent__compat
-#undef freeaddrinfo
-#define freeaddrinfo freeaddrinfo__compat
-
 #ifndef __P
 # ifdef HAVE_PROTOTYPES
 #  define __P(args) args
@@ -134,6 +122,7 @@
 #define	NI_NUMERICSERV	0x00000008
 #define	NI_DGRAM	0x00000010
 
+#ifndef HAVE_TYPE_STRUCT_ADDRINFO
 struct addrinfo {
 	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
 	int	ai_family;	/* PF_xxx */
@@ -144,7 +133,25 @@
 	struct sockaddr *ai_addr;	/* binary address */
 	struct addrinfo *ai_next;	/* next structure in linked list */
 };
+#endif
 
+#ifndef HAVE_GETADDRINFO
+#undef getaddrinfo
+#define getaddrinfo getaddrinfo__compat
+#endif
+#ifndef HAVE_GETNAMEINFO
+#undef getnameinfo
+#define getnameinfo getnameinfo__compat
+#endif
+#ifndef HAVE_FREEHOSTENT
+#undef freehostent
+#define freehostent freehostent__compat
+#endif
+#ifndef HAVE_FREEADDRINFO
+#undef freeaddrinfo
+#define freeaddrinfo freeaddrinfo__compat
+#endif
+
 extern int getaddrinfo __P((
 	const char *hostname, const char *servname,
 	const struct addrinfo *hints,
@@ -152,19 +159,20 @@
 
 extern int getnameinfo __P((
 	const struct sockaddr *sa,
-	size_t salen,
+	socklen_t salen,
 	char *host,
-	size_t hostlen,
+	socklen_t hostlen,
 	char *serv,
-	size_t servlen,
+	socklen_t servlen,
 	int flags));
 
 extern void freehostent __P((struct hostent *));
 extern void freeaddrinfo __P((struct addrinfo *));
-#if defined __UCLIBC__
+extern
+#ifdef GAI_STRERROR_CONST
 const
 #endif
-extern char *gai_strerror __P((int));
+char *gai_strerror __P((int));
 
 /* In case there is no definition of offsetof() provided - though any proper
 Standard C system should have one. */
@@ -174,4 +182,3 @@
 #endif
 
 #endif
-#endif
Index: ruby_1_8/ext/socket/getnameinfo.c
===================================================================
--- ruby_1_8/ext/socket/getnameinfo.c	(revision 26208)
+++ ruby_1_8/ext/socket/getnameinfo.c	(revision 26209)
@@ -135,11 +135,11 @@
 int
 getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
 	const struct sockaddr *sa;
-	size_t salen;
+	socklen_t salen;
 	char *host;
-	size_t hostlen;
+	socklen_t hostlen;
 	char *serv;
-	size_t servlen;
+	socklen_t servlen;
 	int flags;
 {
 	struct afd *afd;
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 26208)
+++ ruby_1_8/ChangeLog	(revision 26209)
@@ -1,3 +1,10 @@
+Thu Dec 31 05:56:38 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/socket/extconf.rb: fix for wide-getaddrinfo option.
+
+	* ext/socket/addrinfo.c: rename {addr,name}info functions to ensure
+	  those are used on darwin.
+
 Thu Dec 31 01:58:47 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* ext/extmk.rb: fix for extstatic.

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

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