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

ruby-changes:9704

From: akr <ko1@a...>
Date: Thu, 1 Jan 2009 19:54:57 +0900 (JST)
Subject: [ruby-changes:9704] Ruby:r21245 (trunk): * ext/socket/mkconstants.rb: add valp argument for family_to_int and

akr	2009-01-01 19:54:38 +0900 (Thu, 01 Jan 2009)

  New Revision: 21245

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

  Log:
    * ext/socket/mkconstants.rb: add valp argument for family_to_int and
      socktype_to_int.
    * ext/socket/socket.c (setup_domain_and_type): use valp argument.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/mkconstants.rb
    trunk/ext/socket/socket.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21244)
+++ ChangeLog	(revision 21245)
@@ -1,3 +1,10 @@
+Thu Jan  1 19:53:33 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/mkconstants.rb: add valp argument for family_to_int and
+	  socktype_to_int.
+
+	* ext/socket/socket.c (setup_domain_and_type): use valp argument.
+
 Thu Jan  1 19:36:57 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/mkconstants.rb: generate family_to_str.
Index: ext/socket/mkconstants.rb
===================================================================
--- ext/socket/mkconstants.rb	(revision 21244)
+++ ext/socket/mkconstants.rb	(revision 21245)
@@ -75,14 +75,14 @@
   }
 end
 
-ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var, pat)")
+ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var, retp_var, pat)")
     switch (<%=len_var%>) {
 %    each_names_with_len(pat) {|names, len|
       case <%=len%>:
 %      names.each {|name|
 #ifdef <%=name%>
 %       size = name.bytesize
-        if (memcmp(<%=str_var%>, <%=c_str name%>, <%=size%>) == 0) return <%=name%>;
+        if (memcmp(<%=str_var%>, <%=c_str name%>, <%=size%>) == 0) { *<%=retp_var%> = <%=name%>; return 0; }
 #endif
 %      }
         return -1;
@@ -153,15 +153,15 @@
 }
 
 static int
-family_to_int(char *str, int len)
+family_to_int(char *str, int len, int *valp)
 {
-<%= gen_name_to_int("str", "len", /\A[AP]F_/) %>
+<%= gen_name_to_int("str", "len", "valp", /\A[AP]F_/) %>
 }
 
 static int
-socktype_to_int(char *str, int len)
+socktype_to_int(char *str, int len, int *valp)
 {
-<%= gen_name_to_int("str", "len", /\ASOCK_/) %>
+<%= gen_name_to_int("str", "len", "valp", /\ASOCK_/) %>
 }
 
 static char *
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 21244)
+++ ext/socket/socket.c	(revision 21245)
@@ -2264,8 +2264,8 @@
 }
 #endif
 
-static int family_to_int(char *str, int len);
-static int socktype_to_int(char *str, int len);
+static int family_to_int(char *str, int len, int *valp);
+static int socktype_to_int(char *str, int len, int *valp);
 
 static void
 setup_domain_and_type(VALUE domain, int *dv, VALUE type, int *tv)
@@ -2275,28 +2275,22 @@
 
     tmp = rb_check_string_type(domain);
     if (!NIL_P(tmp)) {
-        int family;
 	domain = tmp;
 	rb_check_safe_obj(domain);
         ptr = RSTRING_PTR(domain);
-        family = family_to_int(ptr, RSTRING_LEN(domain));
-        if (family == -1)
+        if (family_to_int(ptr, RSTRING_LEN(domain), dv) == -1)
 	    rb_raise(rb_eSocket, "unknown socket domain %s", ptr);
-        *dv = family;
     }
     else {
 	*dv = NUM2INT(domain);
     }
     tmp = rb_check_string_type(type);
     if (!NIL_P(tmp)) {
-        int socktype;
 	type = tmp;
 	rb_check_safe_obj(type);
 	ptr = RSTRING_PTR(type);
-        socktype = socktype_to_int(ptr, RSTRING_LEN(type));
-        if (socktype == -1)
+        if (socktype_to_int(ptr, RSTRING_LEN(type), tv) == -1)
 	    rb_raise(rb_eSocket, "unknown socket type %s", ptr);
-        *tv = socktype;
     }
     else {
 	*tv = NUM2INT(type);

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

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