summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-30 20:56:41 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-12-30 20:56:41 +0000
commit36f93387071e9a92b3c6790a1ccb9f504d24ec3c (patch)
tree21ebd981b431a2fee113643a724abb6649a3b9b6
parent6096bbf0c0f2fe49e74a011037faf076f2ab785a (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--ChangeLog7
-rw-r--r--ext/socket/addrinfo.h43
-rw-r--r--ext/socket/depend2
-rw-r--r--ext/socket/extconf.rb43
-rw-r--r--ext/socket/getaddrinfo.c15
-rw-r--r--ext/socket/getnameinfo.c6
-rw-r--r--ext/socket/socket.c4
7 files changed, 66 insertions, 54 deletions
diff --git a/ChangeLog b/ChangeLog
index 68c1145d15..7f2e39ac2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)