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/