/* * call-seq: Zlib::Inflate.inflate(string) * * Decompresses +string+. Raises a Zlib::NeedDict exception if a preset * dictionary is needed for decompression. * * This method is almost equivalent to the following code: * * def inflate(string) * zstream = Zlib::Inflate.new * buf = zstream.inflate(string) * zstream.finish * zstream.close * buf * end * */ static VALUE rb_inflate_s_inflate(obj, src) VALUE obj, src; { struct zstream z; VALUE dst, args[2]; int err; StringValue(src); zstream_init_inflate(&z); err = inflateInit(&z.stream); if (err != Z_OK) { raise_zlib_error(err, z.stream.msg); } ZSTREAM_READY(&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; }