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

ruby-changes:16494

From: yugui <ko1@a...>
Date: Tue, 29 Jun 2010 23:48:56 +0900 (JST)
Subject: [ruby-changes:16494] Ruby:r28484 (ruby_1_9_2): merges r28401 and r28402 from trunk into ruby_1_9_2.

yugui	2010-06-29 23:48:32 +0900 (Tue, 29 Jun 2010)

  New Revision: 28484

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

  Log:
    merges r28401 and r28402 from trunk into ruby_1_9_2.
    --
    * ext/socket/raddrinfo.c (ruby_getaddrinfo__darwin): new workaround for
      getaddrinfo problem on Mac OS X Snow Leopard.  [ruby-core:29427]
      patch by Wataru Kimura.  [ruby-core:30842]
    --
    add a comment.

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/ext/socket/raddrinfo.c
    branches/ruby_1_9_2/test/socket/test_socket.rb

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 28483)
+++ ruby_1_9_2/ChangeLog	(revision 28484)
@@ -1,3 +1,9 @@
+Wed Jun 23 21:17:32 2010  Tanaka Akira  <akr@f...>
+
+	* ext/socket/raddrinfo.c (ruby_getaddrinfo__darwin): new workaround for
+	  getaddrinfo problem on Mac OS X Snow Leopard.  [ruby-core:29427]
+	  patch by Wataru Kimura.  [ruby-core:30842]
+
 Wed Jun 23 06:44:05 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* configure.in (fchown): need to check.  a patch by Eric Wong
Index: ruby_1_9_2/ext/socket/raddrinfo.c
===================================================================
--- ruby_1_9_2/ext/socket/raddrinfo.c	(revision 28483)
+++ ruby_1_9_2/ext/socket/raddrinfo.c	(revision 28484)
@@ -97,6 +97,33 @@
             ruby_getnameinfo__aix((sa), (salen), (host), (hostlen), (serv), (servlen), (flags))
 #endif
 
+static int str_isnumber __P((const char *));
+
+#if defined(__APPLE__)
+/* fix [ruby-core:29427] */
+static int
+ruby_getaddrinfo__darwin(const char *nodename, const char *servname,
+			 struct addrinfo *hints, struct addrinfo **res)
+{
+    const char *tmp_servname;
+    struct addrinfo tmp_hints;
+    tmp_servname = servname;
+    MEMCPY(&tmp_hints, hints, struct addrinfo, 1);
+    if (nodename && servname) {
+	if (str_isnumber(tmp_servname) && atoi(servname) == 0) {
+	    tmp_servname = NULL;
+#ifdef AI_NUMERICSERV
+	    if (tmp_hints.ai_flags) tmp_hints.ai_flags &= ~AI_NUMERICSERV;
+#endif
+	}
+    }
+    int error = getaddrinfo(nodename, tmp_servname, &tmp_hints, res);
+    return error;
+}
+#undef getaddrinfo
+#define getaddrinfo(node,serv,hints,res) ruby_getaddrinfo__darwin((node),(serv),(hints),(res))
+#endif
+
 #ifndef GETADDRINFO_EMU
 struct getaddrinfo_arg
 {
@@ -316,6 +343,7 @@
     }
 
 #if defined(__APPLE__) && defined(__MACH__)
+    /* [ruby-dev:23164] */
     {
         struct addrinfo *r;
         r = res;
Index: ruby_1_9_2/test/socket/test_socket.rb
===================================================================
--- ruby_1_9_2/test/socket/test_socket.rb	(revision 28483)
+++ ruby_1_9_2/test/socket/test_socket.rb	(revision 28484)
@@ -60,6 +60,15 @@
     assert_raise(SocketError) { Socket.getaddrinfo("www.kame.net", 80, "AF_UNIX") }
   end
 
+  def test_getaddrinfo_raises_no_errors_on_port_argument_of_0 # [ruby-core:29427]
+    assert_nothing_raised('[ruby-core:29427]'){ Socket.getaddrinfo('localhost', 0, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
+    assert_nothing_raised('[ruby-core:29427]'){ Socket.getaddrinfo('localhost', '0', Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
+    assert_nothing_raised('[ruby-core:29427]'){ Socket.getaddrinfo('localhost', '00', Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
+    assert_raise(SocketError, '[ruby-core:29427]'){ Socket.getaddrinfo(nil, nil, Socket::AF_INET, Socket::SOCK_STREAM, nil, Socket::AI_CANONNAME) }
+    assert_nothing_raised('[ruby-core:29427]'){ TCPServer.open('localhost', 0) {} }
+  end
+
+
   def test_getnameinfo
     assert_raise(SocketError) { Socket.getnameinfo(["AF_UNIX", 80, "0.0.0.0"]) }
   end

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

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