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

ruby-changes:6862

From: nobu <ko1@a...>
Date: Wed, 6 Aug 2008 05:34:30 +0900 (JST)
Subject: [ruby-changes:6862] Ruby:r18380 (trunk): * encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name

nobu	2008-08-06 05:31:59 +0900 (Wed, 06 Aug 2008)

  New Revision: 18380

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

  Log:
    * encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name
      is ascii compatible as well as Encoding.find.

  Modified files:
    trunk/ChangeLog
    trunk/encoding.c

Index: encoding.c
===================================================================
--- encoding.c	(revision 18379)
+++ encoding.c	(revision 18380)
@@ -121,24 +121,35 @@
     else if (NIL_P(enc = rb_check_string_type(enc))) {
 	return -1;
     }
-    else {
-	return rb_enc_find_index(StringValueCStr(enc));
+    if (!rb_enc_asciicompat(rb_enc_get(enc))) {
+	return -1;
     }
+    return rb_enc_find_index(StringValueCStr(enc));
 }
 
-rb_encoding *
-rb_to_encoding(VALUE enc)
+static rb_encoding *
+to_encoding(VALUE enc)
 {
     int idx;
 
-    idx = enc_check_encoding(enc);
-    if (idx >= 0) return RDATA(enc)->data;
-    if ((idx = rb_enc_find_index(StringValueCStr(enc))) < 0) {
+    StringValue(enc);
+    if (!rb_enc_asciicompat(rb_enc_get(enc))) {
+	rb_raise(rb_eArgError, "invalid name encoding (non ASCII)");
+    }
+    idx = rb_enc_find_index(StringValueCStr(enc));
+    if (idx < 0) {
 	rb_raise(rb_eArgError, "unknown encoding name - %s", RSTRING_PTR(enc));
     }
     return rb_enc_from_index(idx);
 }
 
+rb_encoding *
+rb_to_encoding(VALUE enc)
+{
+    if (enc_check_encoding(enc) >= 0) return RDATA(enc)->data;
+    return to_encoding(enc);
+}
+
 void
 rb_gc_mark_encodings(void)
 {
@@ -838,17 +849,7 @@
 static VALUE
 enc_find(VALUE klass, VALUE enc)
 {
-    int idx;
-
-    StringValue(enc);
-    if (!rb_enc_asciicompat(rb_enc_get(enc))) {
-	rb_raise(rb_eArgError, "invalid name encoding (non ASCII)");
-    }
-    idx = rb_enc_find_index(StringValueCStr(enc));
-    if (idx < 0) {
-	rb_raise(rb_eArgError, "unknown encoding name - %s", RSTRING_PTR(enc));
-    }
-    return rb_enc_from_encoding(rb_enc_from_index(idx));
+    return rb_enc_from_encoding(to_encoding(enc));
 }
 
 /*
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18379)
+++ ChangeLog	(revision 18380)
@@ -1,5 +1,8 @@
-Wed Aug  6 05:26:42 2008  Nobuyoshi Nakada  <nobu@r...>
+Wed Aug  6 05:31:54 2008  Nobuyoshi Nakada  <nobu@r...>
 
+	* encoding.c (rb_to_encoding_index, rb_to_encoding): check if the name
+	  is ascii compatible as well as Encoding.find.
+
 	* transcode.c (str_encode): no need to duplicate first.
 
 Wed Aug  6 05:08:30 2008  Nobuyoshi Nakada  <nobu@r...>

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

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