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

ruby-changes:18746

From: naruse <ko1@a...>
Date: Thu, 3 Feb 2011 19:09:50 +0900 (JST)
Subject: [ruby-changes:18746] Ruby:r30773 (trunk): e ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect

naruse	2011-02-03 18:56:52 +0900 (Thu, 03 Feb 2011)

  New Revision: 30773

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

  Log:
    e ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect

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

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 30772)
+++ ChangeLog	(revision 30773)
@@ -1,6 +1,6 @@
 Thu Feb  3 18:33:26 2011  NARUSE, Yui  <naruse@r...>
 
-	* ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_new_shared
+	e ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect
 	  because gz->z.input is hidden string. [ruby-core:35057]
 
 Thu Feb  3 16:34:10 2011  NARUSE, Yui  <naruse@r...>
Index: ext/zlib/zlib.c
===================================================================
--- ext/zlib/zlib.c	(revision 30772)
+++ ext/zlib/zlib.c	(revision 30773)
@@ -2471,7 +2471,8 @@
     }
     if (NIL_P(gz->z.input)) return Qnil;
 
-    str = rb_str_new_shared(gz->z.input);
+    str = rb_str_dup(gz->z.input);
+    str = rb_str_resurrect(str);
     OBJ_TAINT(str);  /* for safe */
     return str;
 }
Index: test/zlib/test_zlib.rb
===================================================================
--- test/zlib/test_zlib.rb	(revision 30772)
+++ test/zlib/test_zlib.rb	(revision 30773)
@@ -491,13 +491,41 @@
       Zlib::GzipWriter.open(t.path) {|gz| gz.print("foobar") }
 
       Zlib::GzipReader.open(t.path) do |f|
+        assert_equal(nil, f.unused)
         assert_equal("foo", f.read(3))
-        f.unused
+        assert_equal(nil, f.unused)
         assert_equal("bar", f.read)
-        f.unused
+        assert_equal(nil, f.unused)
       end
     end
 
+    def test_unused2
+      zio = StringIO.new
+
+      io = Zlib::GzipWriter.new zio
+      io.write 'aaaa'
+      io.finish
+
+      io = Zlib::GzipWriter.new zio
+      io.write 'bbbb'
+      io.finish
+
+      zio.rewind
+
+      io = Zlib::GzipReader.new zio
+      assert_equal('aaaa', io.read)
+      unused = io.unused
+      assert_equal(24, unused.bytesize)
+      io.finish
+
+      zio.pos -= unused.length
+
+      io = Zlib::GzipReader.new zio
+      assert_equal('bbbb', io.read)
+      assert_equal(nil, io.unused)
+      io.finish
+    end
+
     def test_read
       t = Tempfile.new("test_zlib_gzip_reader_read")
       t.close

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

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