[macruby-changes] [2349] MacRuby/trunk/ext/zlib/zlib.c

source_changes at macosforge.org source_changes at macosforge.org
Thu Aug 20 11:39:20 PDT 2009


Revision: 2349
          http://trac.macosforge.org/projects/ruby/changeset/2349
Author:   pthomson at apple.com
Date:     2009-08-20 11:39:19 -0700 (Thu, 20 Aug 2009)
Log Message:
-----------
Fixed a crash.

Modified Paths:
--------------
    MacRuby/trunk/ext/zlib/zlib.c

Modified: MacRuby/trunk/ext/zlib/zlib.c
===================================================================
--- MacRuby/trunk/ext/zlib/zlib.c	2009-08-20 18:39:18 UTC (rev 2348)
+++ MacRuby/trunk/ext/zlib/zlib.c	2009-08-20 18:39:19 UTC (rev 2349)
@@ -342,6 +342,7 @@
 /*-------- zstream - internal APIs --------*/
 
 struct zstream {
+    struct RObject object;
     unsigned long flags;
     VALUE buf;
     long buf_filled;
@@ -757,9 +758,8 @@
 static VALUE
 zstream_new(VALUE klass, const struct zstream_funcs *funcs)
 {
-    struct zstream *z = ALLOC(struct zstream);
-    memset(z, 0, sizeof(*z));
-    Data_Wrap_Struct(klass, NULL, NULL, z);
+    NEWOBJ(z, struct zstream);
+    OBJSETUP(z, klass, T_OBJECT);
     zstream_init(z, funcs);
     return (VALUE)z;
 }
@@ -770,9 +770,7 @@
 static struct zstream *
 get_zstream(VALUE obj)
 {
-    struct zstream *z;
-
-    Data_Get_Struct(obj, struct zstream, z);
+    struct zstream *z = (struct zstream*)obj;
     if (!ZSTREAM_IS_READY(z)) {
 	rb_raise(cZError, "stream is not ready");
     }
@@ -888,10 +886,8 @@
 static VALUE
 rb_zstream_flush_next_in(VALUE obj, SEL sel)
 {
-    struct zstream *z;
+    struct zstream *z = (struct zstream*)obj;
     VALUE dst;
-
-    Data_Get_Struct(obj, struct zstream, z);
     dst = zstream_detach_input(z);
     OBJ_INFECT(dst, obj);
     return dst;
@@ -903,10 +899,9 @@
 static VALUE
 rb_zstream_flush_next_out(VALUE obj, SEL sel)
 {
-    struct zstream *z;
+    struct zstream *z = (struct zstream *)obj;
     VALUE dst;
 
-    Data_Get_Struct(obj, struct zstream, z);
     dst = zstream_detach_buffer(z);
     OBJ_INFECT(dst, obj);
     return dst;
@@ -919,8 +914,7 @@
 static VALUE
 rb_zstream_avail_out(VALUE obj, SEL sel)
 {
-    struct zstream *z;
-    Data_Get_Struct(obj, struct zstream, z);
+    struct zstream *z = (struct zstream *)obj;
     return rb_uint2inum(z->stream.avail_out);
 }
 
@@ -946,8 +940,7 @@
 static VALUE
 rb_zstream_avail_in(VALUE obj, SEL sel)
 {
-    struct zstream *z;
-    Data_Get_Struct(obj, struct zstream, z);
+    struct zstream *z = (struct zstream *)obj;
     return INT2FIX(NIL_P(z->input) ? 0 : (int)(BSTRING_LEN(z->input)));
 }
 
@@ -1004,8 +997,7 @@
 static VALUE
 rb_zstream_closed_p(VALUE obj, SEL sel)
 {
-    struct zstream *z;
-    Data_Get_Struct(obj, struct zstream, z);
+    struct zstream *z = (struct zstream *)obj;
     return ZSTREAM_IS_READY(z) ? Qfalse : Qtrue;
 }
 
@@ -1049,13 +1041,13 @@
 rb_deflate_initialize(VALUE obj, SEL sel, int argc, VALUE *argv)
 {
     printf("Calling initialize\n");
-    struct zstream *z;
+    assert(ROBJECT(obj)->tbl == NULL);
     VALUE level, wbits, memlevel, strategy;
     int err;
 
     rb_scan_args(argc, argv, "04", &level, &wbits, &memlevel, &strategy);
-    Data_Get_Struct(obj, struct zstream, z);
-
+    struct zstream *z = (struct zstream *)obj;
+    
     err = deflateInit2(&z->stream, ARG_LEVEL(level), Z_DEFLATED,
 		       ARG_WBITS(wbits), ARG_MEMLEVEL(memlevel),
 		       ARG_STRATEGY(strategy));
@@ -1063,7 +1055,7 @@
 	raise_zlib_error(err, z->stream.msg);
     }
     ZSTREAM_READY(z);
-
+    assert(ROBJECT(obj)->tbl == NULL);
     return obj;
 }
 
@@ -1316,12 +1308,11 @@
 static VALUE
 rb_inflate_initialize(VALUE obj, SEL sel, int argc, VALUE *argv)
 {
-    struct zstream *z;
     VALUE wbits;
     int err;
 
     rb_scan_args(argc, argv, "01", &wbits);
-    Data_Get_Struct(obj, struct zstream, z);
+    struct zstream *z = (struct zstream *)obj;
 
     err = inflateInit2(&z->stream, ARG_WBITS(wbits));
     if (err != Z_OK) {
@@ -1531,8 +1522,7 @@
 
     OBJ_INFECT(obj, dic);
     StringValue(src);
-    err = inflateSetDictionary(&z->stream,
-			       (Bytef*)RSTRING_BYTEPTR(src), RSTRING_BYTELEN(src));
+    err = inflateSetDictionary(&z->stream, BSTRING_PTR_BYTEF(src), BSTRING_LEN(src));
     if (err != Z_OK) {
 	raise_zlib_error(err, z->stream.msg);
     }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090820/f9eff6d0/attachment-0001.html>


More information about the macruby-changes mailing list