--pgp-sign-Multipart_Sat_Jun__7_22:19:50_2008-1
Content-Type: text/plain; charset=ISO-2022-JP

At Sat, 7 Jun 2008 21:01:00 +0900,
Kouya wrote:
> ¤¤¤ÞZlib::Deflate¤Î¥ê¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë¤òÊԤƤ¤¤ë¤Î¤Ç¤¹¤¬¡¢
> clone¤ò¸Æ¤Ó¹¤È¥¨¥é¡¼¤¬¤Ç¤Þ¤¹¡¨Â
ãìïî¤Â¤ò¸Æ¤Ó¹Á°¤Ë¤Ê¤Ë¤«¤¹¤ëɬÍפ¬¤¢¤ë¤Î¤Ç¤·¤ç¤¦¤«¡¨Â
¤è¤í¤·¤¯¤ª´ê¤¤¤·¤Þ¤¹¡£
>
> #¥µ¥ó¥×¥ë¥¹¥¯¥ê¥×¥È
> require 'zlib'
>
> dez  lib::Deflate.new
> dez << "hoge" * 10
> cz  ez.clone
>
> #¼Â¹Ô·ë²Ì
> ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.2.0]
> z2.rb:7:in `initialize_copy': wrong number of arguments (1 for 0)
> (ArgumentError)
> 	from z2.rb:7:in `clone'
> 	from z2.rb:7
> zlib(finalizer): the stream was freed prematurely.

¤³¤ì¤Çľ¤ë¤Ç¤·¤ç¤¦¤«¡£

Index: ext/zlib/zlib.c
--- ext/zlib/zlib.c	(revision 16873)
+++ ext/zlib/zlib.c	(working copy)
@@ -1116,10 +1116,12 @@ rb_deflate_initialize(int argc, VALUE *a
 static VALUE
 rb_deflate_init_copy(VALUE self, VALUE orig)
 {
-    struct zstream *z1  et_zstream(self);
-    struct zstream *z2  et_zstream(orig);
+    struct zstream *z1, *z2;
     int err;

+    Data_Get_Struct(self, struct zstream, z1);
+    z2  et_zstream(orig);
+
     err  eflateCopy(&z1->stream, &z2->stream);
     if (err ! _OK) {
 	raise_zlib_error(err, 0);
@@ -3267,7 +3269,7 @@ void Init_zlib()
     rb_define_singleton_method(cDeflate, "deflate", rb_deflate_s_deflate, -1);
     rb_define_alloc_func(cDeflate, rb_deflate_s_allocate);
     rb_define_method(cDeflate, "initialize", rb_deflate_initialize, -1);
-    rb_define_method(cDeflate, "initialize_copy", rb_deflate_init_copy, 0);
+    rb_define_method(cDeflate, "initialize_copy", rb_deflate_init_copy, 1);
     rb_define_method(cDeflate, "deflate", rb_deflate_deflate, -1);
     rb_define_method(cDeflate, "<<", rb_deflate_addstr, 1);
     rb_define_method(cDeflate, "flush", rb_deflate_flush, -1);


--
Akinori MUSHA / http://akinori.org/

--pgp-sign-Multipart_Sat_Jun__7_22:19:50_2008-1
Content-Type: application/pgp-signature
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (FreeBSD)

iEYEABECAAYFAkhKivYACgkQkgvvx5/Z4e4vIwCeKQXqXLvfDiBudTjqJNvz+GcO
8V0AoKjelPcEAIDTfQX6MezRfHyrbAIu
yb
-----END PGP SIGNATURE-----

--pgp-sign-Multipart_Sat_Jun__7_22:19:50_2008-1--