diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-12-30 20:56:41 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-12-30 20:56:41 +0000 |
commit | 36f93387071e9a92b3c6790a1ccb9f504d24ec3c (patch) | |
tree | 21ebd981b431a2fee113643a724abb6649a3b9b6 | |
parent | 6096bbf0c0f2fe49e74a011037faf076f2ab785a (diff) |
* 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.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@26209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ext/socket/addrinfo.h | 43 | ||||
-rw-r--r-- | ext/socket/depend | 2 | ||||
-rw-r--r-- | ext/socket/extconf.rb | 43 | ||||
-rw-r--r-- | ext/socket/getaddrinfo.c | 15 | ||||
-rw-r--r-- | ext/socket/getnameinfo.c | 6 | ||||
-rw-r--r-- | ext/socket/socket.c | 4 |
7 files changed, 66 insertions, 54 deletions
@@ -1,3 +1,10 @@ +Thu Dec 31 05:56:38 2009 Nobuyoshi Nakada <[email protected]> + + * 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 <[email protected]> * ext/extmk.rb: fix for extstatic. diff --git a/ext/socket/addrinfo.h b/ext/socket/addrinfo.h index e93adafba6..01a045f289 100644 --- a/ext/socket/addrinfo.h +++ b/ext/socket/addrinfo.h @@ -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,6 +133,24 @@ struct addrinfo { 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, @@ -152,19 +159,20 @@ extern int getaddrinfo __P(( 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 @@ Standard C system should have one. */ #endif #endif -#endif diff --git a/ext/socket/depend b/ext/socket/depend index cca6d4e62a..6f30883fd8 100644 --- a/ext/socket/depend +++ b/ext/socket/depend @@ -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 diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 93c395f9f8..24aa08dadd 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -120,8 +120,8 @@ if have_func("sendmsg") | have_func("recvmsg") 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 @@ main() exit(EXIT_FAILURE); } EOF -end if ipv6 and not getaddr_info_ok abort <<EOS @@ -249,11 +248,32 @@ Fatal: invalid value for --with-lookup-order-hack (expected INET, INET6 or UNSPE 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}"] @@ -261,19 +281,6 @@ unless getaddr_info_ok and have_func("getnameinfo", "netdb.h") and have_func("ge 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 diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c index b5729a4dce..15459cf013 100644 --- a/ext/socket/getaddrinfo.c +++ b/ext/socket/getaddrinfo.c @@ -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 @@ getaddrinfo(hostname, servname, hints, res) 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_addr(hostname, af, res, pai, port0) 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); diff --git a/ext/socket/getnameinfo.c b/ext/socket/getnameinfo.c index 8d810f2d2d..32b717713a 100644 --- a/ext/socket/getnameinfo.c +++ b/ext/socket/getnameinfo.c @@ -135,11 +135,11 @@ inet_ntop(af, addr, numaddr, numaddr_len) 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; diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 1b12cdd092..4f8cf07218 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -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) |