/* * call-seq: Zlib::GzipWriter.new(io, level, strategy) * * Creates a GzipWriter object associated with +io+. +level+ and +strategy+ * should be the same as the arguments of Zlib::Deflate.new. The GzipWriter * object writes gzipped data to +io+. At least, +io+ must respond to the * +write+ method that behaves same as write method in IO class. */ static VALUE rb_gzwriter_initialize(argc, argv, obj) int argc; VALUE *argv; VALUE obj; { struct gzfile *gz; VALUE io, level, strategy; int err; rb_scan_args(argc, argv, "12", &io, &level, &strategy); Data_Get_Struct(obj, struct gzfile, gz); /* this is undocumented feature of zlib */ gz->level = ARG_LEVEL(level); err = deflateInit2(&gz->z.stream, gz->level, Z_DEFLATED, -MAX_WBITS, DEF_MEM_LEVEL, ARG_STRATEGY(strategy)); if (err != Z_OK) { raise_zlib_error(err, gz->z.stream.msg); } gz->io = io; ZSTREAM_READY(&gz->z); return obj; }