Update to Ruby 1.8.2 base and thses changes:

o Set RUBY_HAS_ARCHLIB=yes for Ruby packages including archtecture depending
  extention library in order to depend more specific Ruby.

o Apply some bug fixes.

	* ext/zlib/zlib.c (zstream_end): should return value.

	* ext/zlib/zlib.c (rb_deflate_s_deflate, rb_inflate_s_inflate): ensure
	  freeing internal zstreams.  fixed: [ruby-dev:25309]

	* ext/zlib/zlib.c (rb_deflate_init_copy): replace rb_deflate_clone.
This commit is contained in:
taca 2005-01-23 17:34:55 +00:00
parent e794da07d3
commit 93cc3fc203
3 changed files with 173 additions and 2 deletions

View file

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.4 2004/11/30 17:03:15 taca Exp $
# $NetBSD: Makefile,v 1.5 2005/01/23 17:34:55 taca Exp $
# FreeBSD: ports/archivers/ruby-zlib/Makefile,v 1.7 2000/09/26 22:01:12 knu Exp
DISTNAME= ${RUBY_DISTNAME}
@ -10,10 +10,10 @@ MAINTAINER= taca@NetBSD.org
HOMEPAGE= ${RUBY_HOMEPAGE}
COMMENT= Zlib library for Ruby
RUBY_HAS_ARCHLIB= yes
RUBY_VERSION_SUPPORTED= 18
USE_BUILDLINK3= yes
USE_RUBY_EXTCONF= yes
DISTINFO_FILE= ${RUBY_DISTINFO_FILE}
EXTRACT_ELEMENTS= ${RUBY_DISTNAME}/ext/zlib
WRKSRC= ${RUBY_WRKSRC}/ext/zlib

5
devel/ruby-zlib/distinfo Normal file
View file

@ -0,0 +1,5 @@
$NetBSD: distinfo,v 1.3 2005/01/23 17:34:55 taca Exp $
SHA1 (ruby/ruby-1.8.2.tar.gz) = 409a917d3a0aba41f45bd053b767c85b2bc35ffa
Size (ruby/ruby-1.8.2.tar.gz) = 3627349 bytes
SHA1 (patch-aa) = acb62c1fdeec74fa0c1b7fe55067f780ce52fd57

View file

@ -0,0 +1,166 @@
$NetBSD: patch-aa,v 1.1 2005/01/23 17:34:55 taca Exp $
--- ext/zlib/zlib.c.orig 2004-12-18 16:37:01.000000000 +0900
+++ ext/zlib/zlib.c
@@ -55,7 +55,7 @@ static void zstream_reset_input _((struc
static void zstream_passthrough_input _((struct zstream*));
static VALUE zstream_detach_input _((struct zstream*));
static void zstream_reset _((struct zstream*));
-static void zstream_end _((struct zstream*));
+static VALUE zstream_end _((struct zstream*));
static void zstream_run _((struct zstream*, Bytef*, uInt, int));
static VALUE zstream_sync _((struct zstream*, Bytef*, uInt));
static void zstream_mark _((struct zstream*));
@@ -80,7 +80,8 @@ static VALUE rb_zstream_closed_p _((VALU
static VALUE rb_deflate_s_allocate _((VALUE));
static VALUE rb_deflate_initialize _((int, VALUE*, VALUE));
-static VALUE rb_deflate_clone _((VALUE));
+static VALUE rb_deflate_init_copy _((VALUE, VALUE));
+static VALUE deflate_run _((VALUE));
static VALUE rb_deflate_s_deflate _((int, VALUE*, VALUE));
static void do_deflate _((struct zstream*, VALUE, int));
static VALUE rb_deflate_deflate _((int, VALUE*, VALUE));
@@ -89,6 +90,7 @@ static VALUE rb_deflate_flush _((int, VA
static VALUE rb_deflate_params _((VALUE, VALUE, VALUE));
static VALUE rb_deflate_set_dictionary _((VALUE, VALUE));
+static VALUE inflate_run _((VALUE));
static VALUE rb_inflate_s_allocate _((VALUE));
static VALUE rb_inflate_initialize _((int, VALUE*, VALUE));
static VALUE rb_inflate_s_inflate _((VALUE, VALUE));
@@ -667,7 +669,7 @@ zstream_reset(z)
zstream_reset_input(z);
}
-static void
+static VALUE
zstream_end(z)
struct zstream *z;
{
@@ -692,6 +694,7 @@ zstream_end(z)
raise_zlib_error(err, z->stream.msg);
}
z->flags = 0;
+ return Qnil;
}
static void
@@ -1152,26 +1155,31 @@ rb_deflate_initialize(argc, argv, obj)
* Duplicates the deflate stream.
*/
static VALUE
-rb_deflate_clone(obj)
- VALUE obj;
+rb_deflate_init_copy(self, orig)
+ VALUE self, orig;
{
- struct zstream *z = get_zstream(obj);
- struct zstream *z2;
- VALUE clone;
+ struct zstream *z1 = get_zstream(self);
+ struct zstream *z2 = get_zstream(orig);
int err;
- clone = zstream_deflate_new(rb_class_of(obj));
- Data_Get_Struct(clone, struct zstream, z2);
-
- err = deflateCopy(&z2->stream, &z->stream);
+ err = deflateCopy(&z1->stream, &z2->stream);
if (err != Z_OK) {
raise_zlib_error(err, 0);
}
+ z1->flags = z2->flags;
- z2->flags = z->flags;
- CLONESETUP(clone, obj);
- OBJ_INFECT(clone, obj);
- return clone;
+ return self;
+}
+
+static VALUE
+deflate_run(args)
+ VALUE args;
+{
+ struct zstream *z = (struct zstream *)((VALUE *)args)[0];
+ VALUE src = ((VALUE *)args)[1];
+
+ zstream_run(z, RSTRING(src)->ptr, RSTRING(src)->len, Z_FINISH);
+ return zstream_detach_buffer(z);
}
/*
@@ -1201,7 +1209,7 @@ rb_deflate_s_deflate(argc, argv, klass)
VALUE klass;
{
struct zstream z;
- VALUE src, level, dst;
+ VALUE src, level, dst, args[2];
int err, lev;
rb_scan_args(argc, argv, "11", &src, &level);
@@ -1215,9 +1223,9 @@ rb_deflate_s_deflate(argc, argv, klass)
}
ZSTREAM_READY(&z);
- zstream_run(&z, RSTRING(src)->ptr, RSTRING(src)->len, Z_FINISH);
- dst = zstream_detach_buffer(&z);
- zstream_end(&z);
+ args[0] = (VALUE)&z;
+ args[1] = src;
+ dst = rb_ensure(deflate_run, (VALUE)args, zstream_end, (VALUE)&z);
OBJ_INFECT(dst, src);
return dst;
@@ -1239,6 +1247,18 @@ do_deflate(z, src, flush)
}
}
+static VALUE
+inflate_run(args)
+ VALUE args;
+{
+ struct zstream *z = (struct zstream *)((VALUE *)args)[0];
+ VALUE src = ((VALUE *)args)[1];
+
+ zstream_run(z, RSTRING(src)->ptr, RSTRING(src)->len, Z_SYNC_FLUSH);
+ zstream_run(z, "", 0, Z_FINISH); /* for checking errors */
+ return zstream_detach_buffer(z);
+}
+
/*
* call-seq: deflate(string[, flush])
*
@@ -1452,7 +1472,7 @@ rb_inflate_s_inflate(obj, src)
VALUE obj, src;
{
struct zstream z;
- VALUE dst;
+ VALUE dst, args[2];
int err;
StringValue(src);
@@ -1463,10 +1483,9 @@ rb_inflate_s_inflate(obj, src)
}
ZSTREAM_READY(&z);
- zstream_run(&z, RSTRING(src)->ptr, RSTRING(src)->len, Z_SYNC_FLUSH);
- zstream_run(&z, "", 0, Z_FINISH); /* for checking errors */
- dst = zstream_detach_buffer(&z);
- zstream_end(&z);
+ args[0] = (VALUE)&z;
+ args[1] = src;
+ dst = rb_ensure(inflate_run, (VALUE)args, zstream_end, (VALUE)&z);
OBJ_INFECT(dst, src);
return dst;
@@ -3333,7 +3352,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, "clone", rb_deflate_clone, 0);
+ rb_define_method(cDeflate, "initialize_copy", rb_deflate_init_copy, 0);
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);