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/