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

ruby-changes:8344

From: matz <ko1@a...>
Date: Tue, 21 Oct 2008 21:59:15 +0900 (JST)
Subject: [ruby-changes:8344] Ruby:r19872 (trunk): * ext/zlib/zlib.c (rb_gzwriter_write): conversion should be done

matz	2008-10-21 21:56:48 +0900 (Tue, 21 Oct 2008)

  New Revision: 19872

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

  Log:
    * ext/zlib/zlib.c (rb_gzwriter_write): conversion should be done
      using to_str, not to_s.
    
    * ext/zlib/zlib.c (rb_gzwriter_write): need proper conversion
      according to gz encoding.
    
    * ext/zlib/zlib.c (rb_gzreader_ungetc): convert string encoding
      before unget.

  Modified files:
    trunk/ChangeLog
    trunk/ext/zlib/zlib.c
    trunk/test/zlib/test_zlib.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19871)
+++ ChangeLog	(revision 19872)
@@ -1,3 +1,14 @@
+Tue Oct 21 21:52:00 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* ext/zlib/zlib.c (rb_gzwriter_write): conversion should be done
+	  using to_str, not to_s.
+
+	* ext/zlib/zlib.c (rb_gzwriter_write): need proper conversion
+	  according to gz encoding.
+
+	* ext/zlib/zlib.c (rb_gzreader_ungetc): convert string encoding
+	  before unget.
+
 Tue Oct 21 21:33:36 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/test/unit.rb (assert_nothing_raised): raise with backtrace.
Index: ext/zlib/zlib.c
===================================================================
--- ext/zlib/zlib.c	(revision 19871)
+++ ext/zlib/zlib.c	(revision 19872)
@@ -2747,10 +2747,10 @@
 {
     struct gzfile *gz = get_gzfile(obj);
 
-    if (TYPE(str) != T_STRING) {
-       str = rb_obj_as_string(str);
+    StringValue(str);
+    if (gz->enc2 && gz->enc2 != rb_ascii8bit_encoding()) {
+	str = rb_str_conv_enc(str, rb_enc_get(str), gz->enc2);
     }
-    str = rb_str_export(str);
     gzfile_write(gz, (Bytef*)RSTRING_PTR(str), RSTRING_LEN(str));
     return INT2FIX(RSTRING_LEN(str));
 }
@@ -3075,6 +3075,11 @@
 rb_gzreader_ungetc(VALUE obj, VALUE s)
 {
     struct gzfile *gz = get_gzfile(obj);
+
+    StringValue(s);
+    if (gz->enc2 && gz->enc2 != rb_ascii8bit_encoding()) {
+	s = rb_str_conv_enc(s, rb_enc_get(s), gz->enc2);
+    }
     gzfile_ungets(gz, (const Bytef*)RSTRING_PTR(s), RSTRING_LEN(s));
     return Qnil;
 }
Index: test/zlib/test_zlib.rb
===================================================================
--- test/zlib/test_zlib.rb	(revision 19871)
+++ test/zlib/test_zlib.rb	(revision 19872)
@@ -597,7 +597,7 @@
       assert_equal("foo", Zlib::GzipReader.open(t.path) {|gz| gz.read })
 
       o = Object.new
-      def o.to_s; "bar"; end
+      def o.to_str; "bar"; end
       Zlib::GzipWriter.open(t.path) {|gz| gz.print(o) }
       assert_equal("bar", Zlib::GzipReader.open(t.path) {|gz| gz.read })
     end

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

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