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

ruby-changes:7465

From: akr <ko1@a...>
Date: Sun, 31 Aug 2008 16:46:58 +0900 (JST)
Subject: [ruby-changes:7465] Ruby:r18984 (trunk): * transcode.c (econv_insert_output): raise ArgumentError on failure.

akr	2008-08-31 16:43:19 +0900 (Sun, 31 Aug 2008)

  New Revision: 18984

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

  Log:
    * transcode.c (econv_insert_output): raise ArgumentError on failure.

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_econv.rb
    trunk/transcode.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18983)
+++ ChangeLog	(revision 18984)
@@ -1,3 +1,7 @@
+Sun Aug 31 16:42:23 2008  Tanaka Akira  <akr@f...>
+
+	* transcode.c (econv_insert_output): raise ArgumentError on failure.
+
 Sun Aug 31 16:39:17 2008  Koichi Sasada  <ko1@a...>
 
 	* bootstraptest/test_thread.rb: add a test.
Index: test/ruby/test_econv.rb
===================================================================
--- test/ruby/test_econv.rb	(revision 18983)
+++ test/ruby/test_econv.rb	(revision 18984)
@@ -424,20 +424,20 @@
     ec = Encoding::Converter.new("EUC-JP", "ISO-2022-JP")
     ec.primitive_convert(src="\xa1\xa1", dst="", nil, 10, Encoding::Converter::PARTIAL_INPUT)
     assert_equal("\e$B!!".force_encoding("ISO-2022-JP"), dst)
-    assert_equal(true, ec.insert_output("???"))
+    assert_equal(nil, ec.insert_output("???"))
     ec.primitive_convert("", dst, nil, 10, Encoding::Converter::PARTIAL_INPUT)
     assert_equal("\e$B!!\e(B???".force_encoding("ISO-2022-JP"), dst)
     ec.primitive_convert(src="\xa1\xa2", dst, nil, 10, Encoding::Converter::PARTIAL_INPUT)
     assert_equal("\e$B!!\e(B???\e$B!\"".force_encoding("ISO-2022-JP"), dst)
 
-    assert_equal(true, ec.insert_output("\xA1\xA1".force_encoding("EUC-JP")))
+    assert_equal(nil, ec.insert_output("\xA1\xA1".force_encoding("EUC-JP")))
     ec.primitive_convert("", dst, nil, 10, Encoding::Converter::PARTIAL_INPUT)
     assert_equal("\e$B!!\e(B???\e$B!\"!!".force_encoding("ISO-2022-JP"), dst) 
 
     ec.primitive_convert(src="\xa1\xa3", dst, nil, 10, Encoding::Converter::PARTIAL_INPUT)
     assert_equal("\e$B!!\e(B???\e$B!\"!!!\#".force_encoding("ISO-2022-JP"), dst)
 
-    assert_equal(true, ec.insert_output("\u3042"))
+    assert_equal(nil, ec.insert_output("\u3042"))
     ec.primitive_convert("", dst, nil, 10, Encoding::Converter::PARTIAL_INPUT)
     assert_equal("\e$B!!\e(B???\e$B!\"!!!\#$\"".force_encoding("ISO-2022-JP"), dst)
 
Index: transcode.c
===================================================================
--- transcode.c	(revision 18983)
+++ transcode.c	(revision 18984)
@@ -2711,6 +2711,25 @@
     return ary;
 }
 
+/*
+ * call-seq:
+ *   insert_output(string) -> nil
+ *
+ * inserts string into the encoding converter.
+ * The string will be output on next conversion.
+ *
+ * This method should be used only when a conversion error is occur.
+ *
+ *  ec = Encoding::Converter.new("utf-8", "iso-8859-1")
+ *  src = "HIRAGANA LETTER A is \u{3042}."
+ *  dst = ""
+ *  p ec.primitive_convert(src, dst)    #=> :undefined_conversion
+ *  puts "[#{dst.dump}, #{src.dump}]"   #=> ["HIRAGANA LETTER A is ", "."]
+ *  ec.insert_output("<err>")
+ *  p ec.primitive_convert(src, dst)    #=> :finished
+ *  puts "[#{dst.dump}, #{src.dump}]"   #=> ["HIRAGANA LETTER A is <err>.", ""]
+ *
+ */
 static VALUE
 econv_insert_output(VALUE self, VALUE string)
 {
@@ -2725,10 +2744,11 @@
     string = rb_str_transcode(string, rb_enc_from_encoding(rb_enc_find(insert_enc)), 0);
 
     ret = rb_econv_insert_output(ec, (const unsigned char *)RSTRING_PTR(string), RSTRING_LEN(string), insert_enc);
-    if (ret == -1)
-        return Qfalse;
+    if (ret == -1) {
+	rb_raise(rb_eArgError, "too big string");
+    }
 
-    return Qtrue;
+    return Qnil;
 }
 
 static VALUE

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

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