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

ruby-changes:10105

From: akr <ko1@a...>
Date: Sun, 18 Jan 2009 17:03:41 +0900 (JST)
Subject: [ruby-changes:10105] Ruby:r21648 (trunk): * ext/socket/raddrinfo.c (addrinfo_inspect_sockaddr): new

akr	2009-01-18 17:03:24 +0900 (Sun, 18 Jan 2009)

  New Revision: 21648

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

  Log:
    * ext/socket/raddrinfo.c (addrinfo_inspect_sockaddr): new
      method AddrInfo#inspect_sockaddr.
      (inspect_sockaddr): extracted from addrinfo_inspect.
      (addrinfo_inspect): use inspect_sockaddr.
      (Init_addrinfo): define the new method.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/raddrinfo.c
    trunk/test/socket/test_addrinfo.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21647)
+++ ChangeLog	(revision 21648)
@@ -1,3 +1,11 @@
+Sun Jan 18 16:56:46 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/raddrinfo.c (addrinfo_inspect_sockaddr): new
+	  method AddrInfo#inspect_sockaddr.
+	  (inspect_sockaddr): extracted from addrinfo_inspect.
+	  (addrinfo_inspect): use inspect_sockaddr.
+	  (Init_addrinfo): define the new method.
+
 Sun Jan 18 16:46:37 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/raddrinfo.c (addrinfo_ip_address): new method
Index: ext/socket/raddrinfo.c
===================================================================
--- ext/socket/raddrinfo.c	(revision 21647)
+++ ext/socket/raddrinfo.c	(revision 21648)
@@ -879,25 +879,11 @@
     return get_afamily((struct sockaddr *)&rai->addr, rai->sockaddr_len);
 }
 
-/*
- * call-seq:
- *   addrinfo.inspect => string
- *
- * returns a string which shows addrinfo in human-readable form.
- *
- *   AddrInfo.tcp("localhost", 80).inspect #=> "#<AddrInfo: 127.0.0.1:80 TCP (localhost:80)>"
- *   AddrInfo.unix("/tmp/sock").inspect    #=> "#<AddrInfo: /tmp/sock SOCK_STREAM>"
- *
- */
 static VALUE
-addrinfo_inspect(VALUE self)
+inspect_sockaddr(VALUE addrinfo, VALUE ret)
 {
-    rb_addrinfo_t *rai = get_addrinfo(self);
-    int internet_p;
-    VALUE ret;
+    rb_addrinfo_t *rai = get_addrinfo(addrinfo);
 
-    ret = rb_sprintf("#<%s: ", rb_obj_classname(self));
-
     if (rai->sockaddr_len == 0) {
         rb_str_cat2(ret, "empty-sockaddr");
     }
@@ -1023,6 +1009,30 @@
         }
     }
 
+    return ret;
+}
+
+/*
+ * call-seq:
+ *   addrinfo.inspect => string
+ *
+ * returns a string which shows addrinfo in human-readable form.
+ *
+ *   AddrInfo.tcp("localhost", 80).inspect #=> "#<AddrInfo: 127.0.0.1:80 TCP (localhost:80)>"
+ *   AddrInfo.unix("/tmp/sock").inspect    #=> "#<AddrInfo: /tmp/sock SOCK_STREAM>"
+ *
+ */
+static VALUE
+addrinfo_inspect(VALUE self)
+{
+    rb_addrinfo_t *rai = get_addrinfo(self);
+    int internet_p;
+    VALUE ret;
+
+    ret = rb_sprintf("#<%s: ", rb_obj_classname(self));
+
+    inspect_sockaddr(self, ret);
+
     if (rai->pfamily && ai_get_afamily(rai) != rai->pfamily) {
         ID id = intern_protocol_family(rai->pfamily);
         if (id)
@@ -1081,6 +1091,23 @@
     return ret;
 }
 
+/*
+ * call-seq:
+ *   addrinfo.inspect_sockaddr => string
+ *
+ * returns a string which shows the sockaddr in _addrinfo_ with human-readable form.
+ *
+ *   AddrInfo.tcp("localhost", 80).inspect_sockaddr     #=> "127.0.0.1:80"
+ *   AddrInfo.tcp("ip6-localhost", 80).inspect_sockaddr #=> "[::1]:80"
+ *   AddrInfo.unix("/tmp/sock").inspect_sockaddr        #=> "/tmp/sock"
+ *
+ */
+static VALUE
+addrinfo_inspect_sockaddr(VALUE self)
+{
+    return inspect_sockaddr(self, rb_str_new("", 0));
+}
+
 /* :nodoc: */
 static VALUE
 addrinfo_mdump(VALUE self)
@@ -1816,6 +1843,7 @@
     rb_define_alloc_func(rb_cAddrInfo, addrinfo_s_allocate);
     rb_define_method(rb_cAddrInfo, "initialize", addrinfo_initialize, -1);
     rb_define_method(rb_cAddrInfo, "inspect", addrinfo_inspect, 0);
+    rb_define_method(rb_cAddrInfo, "inspect_sockaddr", addrinfo_inspect_sockaddr, 0);
     rb_define_singleton_method(rb_cAddrInfo, "getaddrinfo", addrinfo_s_getaddrinfo, -1);
     rb_define_singleton_method(rb_cAddrInfo, "ip", addrinfo_s_ip, 1);
     rb_define_singleton_method(rb_cAddrInfo, "tcp", addrinfo_s_tcp, 2);
Index: test/socket/test_addrinfo.rb
===================================================================
--- test/socket/test_addrinfo.rb	(revision 21647)
+++ test/socket/test_addrinfo.rb	(revision 21648)
@@ -41,6 +41,11 @@
     assert_equal(80, ai.ip_port)
   end
 
+  def test_addrinfo_inspect_sockaddr
+    ai = AddrInfo.tcp("127.0.0.1", 80)
+    assert_equal("127.0.0.1:80", ai.inspect_sockaddr)
+  end
+
   def test_addrinfo_new_inet
     ai = AddrInfo.new(["AF_INET", 46102, "localhost.localdomain", "127.0.0.2"])
     assert_equal([46102, "127.0.0.2"], Socket.unpack_sockaddr_in(ai))
@@ -305,6 +310,11 @@
       assert_equal(80, ai.ip_port)
     end
 
+    def test_addrinfo_inspect_sockaddr_inet6
+      ai = AddrInfo.tcp("::1", 80)
+      assert_equal("[::1]:80", ai.inspect_sockaddr)
+    end
+
     def test_marshal_inet6
       ai1 = AddrInfo.tcp("::1", 80)
       ai2 = Marshal.load(Marshal.dump(ai1))
@@ -334,6 +344,11 @@
       assert_equal("/tmp/sock1", ai.unix_path)
     end
 
+    def test_addrinfo_inspect_sockaddr_unix
+      ai = AddrInfo.unix("/tmp/test_addrinfo_inspect_sockaddr_unix")
+      assert_equal("/tmp/test_addrinfo_inspect_sockaddr_unix", ai.inspect_sockaddr)
+    end
+
     def test_addrinfo_new_unix
       ai = AddrInfo.new(["AF_UNIX", "/tmp/sock"])
       assert_equal("/tmp/sock", Socket.unpack_sockaddr_un(ai))

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

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