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

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


Revision: 2348
          http://trac.macosforge.org/projects/ruby/changeset/2348
Author:   pthomson at apple.com
Date:     2009-08-20 11:39:18 -0700 (Thu, 20 Aug 2009)
Log Message:
-----------
Zlib::inflate works. But now I need to figure out why Zlib::Deflate.new doesn't work.

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:17 UTC (rev 2347)
+++ MacRuby/trunk/ext/zlib/zlib.c	2009-08-20 18:39:18 UTC (rev 2348)
@@ -190,6 +190,9 @@
 
 void Init_zlib _((void));
 
+#define BSTRING_LEN(s) rb_bytestring_length(s)
+#define BSTRING_PTR(s) (rb_bytestring_byte_pointer(s))
+#define BSTRING_PTR_BYTEF(s) ((Bytef*)rb_bytestring_byte_pointer(s))
 
 
 /*--------- Exceptions --------*/
@@ -280,7 +283,7 @@
          sum = func(sum, Z_NULL, 0);
      } else {
          StringValue(str);
-         sum = func(sum, (Bytef*)RSTRING_PTR(str), RSTRING_LEN(str));
+         sum = func(sum, BSTRING_PTR_BYTEF(str), BSTRING_LEN(str));
      }
      return rb_uint2inum(sum);
  }
@@ -409,9 +412,6 @@
 
 #define zstream_init_deflate(z)   zstream_init((z), &deflate_funcs)
 #define zstream_init_inflate(z)   zstream_init((z), &inflate_funcs)
-#define BSTRING_LEN(s) rb_bytestring_length(s)
-#define BSTRING_PTR(s) (rb_bytestring_byte_pointer(s))
-#define BSTRING_PTR_BYTEF(s) ((Bytef*)rb_bytestring_byte_pointer(s))
 
 static void
 zstream_expand_buffer(struct zstream *z)
@@ -422,7 +422,7 @@
         GC_WB(&z->buf, rb_bytestring_new());
         rb_bytestring_resize(z->buf, ZSTREAM_INITIAL_BUFSIZE);
         z->buf_filled = 0;
-        z->stream.next_out = (Bytef*)rb_bytestring_byte_pointer(z->buf);
+        z->stream.next_out = BSTRING_PTR_BYTEF(z->buf);
         z->stream.avail_out = ZSTREAM_INITIAL_BUFSIZE;
         return;
     }
@@ -446,15 +446,13 @@
 zstream_expand_buffer_into(struct zstream *z, int size)
 {
     if (NIL_P(z->buf)) {
-    /* I uses rb_str_new here not rb_str_buf_new because
-        rb_str_buf_new makes a zero-length string. */
-            GC_WB(&z->buf, rb_bytestring_new());
+        GC_WB(&z->buf, rb_bytestring_new());
         z->buf_filled = 0;
         z->stream.next_out = BSTRING_PTR_BYTEF(z->buf);
         z->stream.avail_out = size;
     }
     else if (z->stream.avail_out != size) {
-        rb_str_resize(z->buf, z->buf_filled + size);
+        rb_bytestring_resize(z->buf, z->buf_filled + size);
         z->stream.next_out = BSTRING_PTR_BYTEF(z->buf) + z->buf_filled;
         z->stream.avail_out = size;
     }
@@ -1050,6 +1048,7 @@
 static VALUE
 rb_deflate_initialize(VALUE obj, SEL sel, int argc, VALUE *argv)
 {
+    printf("Calling initialize\n");
     struct zstream *z;
     VALUE level, wbits, memlevel, strategy;
     int err;
@@ -1103,7 +1102,7 @@
  * Compresses the given +string+. Valid values of level are
  * <tt>Zlib::NO_COMPRESSION</tt>, <tt>Zlib::BEST_SPEED</tt>,
  * <tt>Zlib::BEST_COMPRESSION</tt>, <tt>Zlib::DEFAULT_COMPRESSION</tt>, and an
- * integer from 0 to 9.
+ * integer from 0 to 9. The default is Zlib::DEFAULT_COMPRESSION
  *
  * This method is almost equivalent to the following code:
  *
@@ -1114,7 +1113,6 @@
  *     dst
  *   end
  *
- * TODO: what's default value of +level+?
  *
  */
 static VALUE
@@ -1281,14 +1279,13 @@
     OBJ_INFECT(obj, dic);
     StringValue(src);
     err = deflateSetDictionary(&z->stream,
-			       (Bytef*)RSTRING_PTR(src), RSTRING_LEN(src));
+			       BSTRING_PTR_BYTEF(src), BSTRING_LEN(src));
     if (err != Z_OK) {
 	raise_zlib_error(err, z->stream.msg);
     }
 
     return dic;
 }
-#if 0
 
 /* ------------------------------------------------------------------------- */
 
@@ -1341,7 +1338,7 @@
     struct zstream *z = (struct zstream*)((VALUE*)args)[0];
     VALUE src = ((VALUE*)args)[1];
 
-    zstream_run(z, (Bytef*)RSTRING_BYTEPTR(src), RSTRING_BYTELEN(src), Z_SYNC_FLUSH);
+    zstream_run(z, BSTRING_PTR_BYTEF(src), BSTRING_LEN(src), Z_SYNC_FLUSH);
     zstream_run(z, (Bytef*)"", 0, Z_FINISH);  /* for checking errors */
     return zstream_detach_buffer(z);
 }
@@ -1396,8 +1393,8 @@
 	return;
     }
     StringValue(src);
-    if (RSTRING_BYTELEN(src) > 0) { /* prevent Z_BUF_ERROR */
-	zstream_run(z, (Bytef*)RSTRING_BYTEPTR(src), RSTRING_BYTELEN(src), Z_SYNC_FLUSH);
+    if (BSTRING_LEN(src) > 0) { /* prevent Z_BUF_ERROR */
+	zstream_run(z, BSTRING_PTR_BYTEF(src), BSTRING_LEN(src), Z_SYNC_FLUSH);
     }
 }
 
@@ -1429,6 +1426,9 @@
 	}
 	else {
 	    StringValue(src);
+	    if (CLASS_OF(src) != rb_cByteString) {
+            src = rb_coerce_to_bytestring(src);
+	    }
 	    zstream_append_buffer2(z, src);
 	    dst = rb_str_new(0, 0);
 	}
@@ -1490,7 +1490,7 @@
 
     OBJ_INFECT(obj, src);
     StringValue(src);
-    return zstream_sync(z, (Bytef*)RSTRING_BYTEPTR(src), RSTRING_BYTELEN(src));
+    return zstream_sync(z, BSTRING_PTR_BYTEF(src), BSTRING_LEN(src));
 }
 
 /*
@@ -1540,6 +1540,7 @@
     return dic;
 }
 
+#if 0
 
 
 #if GZIP_SUPPORT
@@ -3225,7 +3226,6 @@
     rb_define_const(mZlib, "BINARY", INT2FIX(Z_BINARY));
     rb_define_const(mZlib, "ASCII", INT2FIX(Z_ASCII));
     rb_define_const(mZlib, "UNKNOWN", INT2FIX(Z_UNKNOWN));
-
     cDeflate = rb_define_class_under(mZlib, "Deflate", cZStream);
     rb_objc_define_method(*(VALUE *)cDeflate, "deflate", rb_deflate_s_deflate, -1);
     rb_objc_define_method(*(VALUE *)cDeflate, "alloc", rb_deflate_s_allocate, 0);
@@ -3236,10 +3236,10 @@
     rb_objc_define_method(cDeflate, "flush", rb_deflate_flush, -1);
     rb_objc_define_method(cDeflate, "params", rb_deflate_params, 2);
     rb_objc_define_method(cDeflate, "set_dictionary", rb_deflate_set_dictionary, 1);
-#if 0
+
     cInflate = rb_define_class_under(mZlib, "Inflate", cZStream);
-    rb_objc_define_method(*(VALUE *)cDeflate, "inflate", rb_inflate_s_inflate, 1);
-    rb_objc_define_method(*(VALUE *)cDeflate, "alloc", rb_inflate_s_allocate, 0);
+    rb_objc_define_method(*(VALUE *)cInflate, "inflate", rb_inflate_s_inflate, 1);
+    rb_objc_define_method(*(VALUE *)cInflate, "alloc", rb_inflate_s_allocate, 0);
     rb_objc_define_method(cInflate, "initialize", rb_inflate_initialize, -1);
     rb_objc_define_method(cInflate, "inflate", rb_inflate_inflate, 1);
     rb_objc_define_method(cInflate, "<<", rb_inflate_addstr, 1);
@@ -3265,7 +3265,7 @@
     rb_define_const(mZlib, "SYNC_FLUSH", INT2FIX(Z_SYNC_FLUSH));
     rb_define_const(mZlib, "FULL_FLUSH", INT2FIX(Z_FULL_FLUSH));
     rb_define_const(mZlib, "FINISH", INT2FIX(Z_FINISH));
-
+#if 0
 #if GZIP_SUPPORT
     id_write = rb_intern("write");
     id_read = rb_intern("read");
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090820/23e9944e/attachment-0001.html>


More information about the macruby-changes mailing list