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

ruby-changes:9719

From: akr <ko1@a...>
Date: Fri, 2 Jan 2009 02:09:51 +0900 (JST)
Subject: [ruby-changes:9719] Ruby:r21260 (trunk): * ext/socket/socket.c (constant_arg): extracted from family_arg.

akr	2009-01-02 02:09:35 +0900 (Fri, 02 Jan 2009)

  New Revision: 21260

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

  Log:
    * ext/socket/socket.c (constant_arg): extracted from family_arg.
      (family_arg): use constant_arg.
      (socktype_arg): ditto.
      (level_arg): ditto.

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

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21259)
+++ ChangeLog	(revision 21260)
@@ -1,3 +1,10 @@
+Fri Jan  2 02:08:36 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/socket.c (constant_arg): extracted from family_arg.
+	  (family_arg): use constant_arg.
+	  (socktype_arg): ditto.
+	  (level_arg): ditto.
+
 Fri Jan  2 01:15:11 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/socket.c (level_arg): defined.
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c	(revision 21259)
+++ ext/socket/socket.c	(revision 21260)
@@ -242,83 +242,49 @@
 #endif
 
 static int
-family_arg(VALUE domain)
+constant_arg(VALUE arg, int (*str_to_int)(char*, int, int*), char *errmsg)
 {
-    /* convert AF_INET, etc. */
     VALUE tmp;
     char *ptr;
     int ret;
 
-    if (SYMBOL_P(domain)) {
-        domain = rb_sym_to_s(domain);
+    if (SYMBOL_P(arg)) {
+        arg = rb_sym_to_s(arg);
         goto str;
     }
-    else if (!NIL_P(tmp = rb_check_string_type(domain))) {
-	domain = tmp;
+    else if (!NIL_P(tmp = rb_check_string_type(arg))) {
+	arg = tmp;
       str:
-	rb_check_safe_obj(domain);
-        ptr = RSTRING_PTR(domain);
-        if (family_to_int(ptr, RSTRING_LEN(domain), &ret) == -1)
-	    rb_raise(rb_eSocket, "unknown socket domain %s", ptr);
+	rb_check_safe_obj(arg);
+        ptr = RSTRING_PTR(arg);
+        if (str_to_int(ptr, RSTRING_LEN(arg), &ret) == -1)
+	    rb_raise(rb_eSocket, "%s %s", errmsg, ptr);
     }
     else {
-	ret = NUM2INT(domain);
+	ret = NUM2INT(arg);
     }
     return ret;
 }
 
 static int
+family_arg(VALUE domain)
+{
+    /* convert AF_INET, etc. */
+    return constant_arg(domain, family_to_int, "unknown socket domain");
+}
+
+static int
 socktype_arg(VALUE type)
 {
     /* convert SOCK_STREAM, etc. */
-    VALUE tmp;
-    char *ptr;
-    int ret;
-
-    if (SYMBOL_P(type)) {
-        type = rb_sym_to_s(type);
-        goto str;
-    }
-    else if (!NIL_P(tmp = rb_check_string_type(type))) {
-	type = tmp;
-      str:
-	rb_check_safe_obj(type);
-	ptr = RSTRING_PTR(type);
-        if (socktype_to_int(ptr, RSTRING_LEN(type), &ret) == -1)
-	    rb_raise(rb_eSocket, "unknown socket type %s", ptr);
-    }
-    else {
-	ret = NUM2INT(type);
-    }
-
-    return ret;
+    return constant_arg(type, socktype_to_int, "unknown socket type");
 }
 
 static int
 level_arg(VALUE level)
 {
     /* convert SOL_SOCKET, IPPROTO_TCP, etc. */
-    VALUE tmp;
-    char *ptr;
-    int ret;
-
-    if (SYMBOL_P(level)) {
-        level = rb_sym_to_s(level);
-        goto str;
-    }
-    else if (!NIL_P(tmp = rb_check_string_type(level))) {
-	level = tmp;
-      str:
-	rb_check_safe_obj(level);
-	ptr = RSTRING_PTR(level);
-        if (level_to_int(ptr, RSTRING_LEN(level), &ret) == -1)
-	    rb_raise(rb_eSocket, "unknown protocol level %s", ptr);
-    }
-    else {
-	ret = NUM2INT(level);
-    }
-
-    return ret;
+    return constant_arg(level, level_to_int, "unknown protocol level");
 }
 
 static VALUE

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

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