Class: Zstdlib::GzipReader
- Includes:
- Enumerable
- Defined in:
- ext/zstdlib/ruby/zlib-2.7/zstdlib.c,
ext/zstdlib/ruby/zlib-2.7/zstdlib.c,
ext/zstdlib/ruby/zlib-2.6/zstdlib.c,
ext/zstdlib/ruby/zlib-2.6/zstdlib.c,
ext/zstdlib/ruby/zlib-2.5/zstdlib.c,
ext/zstdlib/ruby/zlib-2.5/zstdlib.c,
ext/zstdlib/ruby/zlib-2.4/zstdlib.c,
ext/zstdlib/ruby/zlib-2.4/zstdlib.c,
ext/zstdlib/ruby/zlib-2.3/zstdlib.c,
ext/zstdlib/ruby/zlib-2.3/zstdlib.c,
ext/zstdlib/ruby/zlib-2.2/zstdlib.c,
ext/zstdlib/ruby/zlib-2.2/zstdlib.c
Overview
Zstdlib::GzipReader is the class for reading a gzipped file. GzipReader should be used an IO, or -IO-like, object.
Zstdlib::GzipReader.open('hoge.gz') {|gz| print gz.read }
File.open('hoge.gz') do |f| gz = Zstdlib::GzipReader.new(f) print gz.read gz.close end
== Method Catalogue
The following methods in Zstdlib::GzipReader are just like their counterparts in IO, but they raise Zstdlib::Error or Zstdlib::GzipFile::Error exception if an error was found in the gzip file.
- #each
- #each_line
- #each_byte
- #gets
- #getc
- #lineno
- #lineno=
- #read
- #readchar
- #readline
- #readlines
- #ungetc
Be careful of the footer of the gzip file. A gzip file has the checksum of pre-compressed data in its footer. GzipReader checks all uncompressed data against that checksum at the following cases, and if it fails, raises Zstdlib::GzipFile::NoFooter, Zstdlib::GzipFile::CRCError, or Zstdlib::GzipFile::LengthError exception.
- When an reading request is received beyond the end of file (the end of compressed data). That is, when Zstdlib::GzipReader#read, Zstdlib::GzipReader#gets, or some other methods for reading returns nil.
- When Zstdlib::GzipFile#close method is called after the object reaches the end of file.
- When Zstdlib::GzipReader#unused method is called after the object reaches the end of file.
The rest of the methods are adequately described in their own documentation.
Class Method Summary collapse
-
.open(*args) ⇒ Object
call-seq: Zstdlib::GzipReader.open(filename) {|gz| ... }.
Instance Method Summary collapse
-
#bytes ⇒ Object
This is a deprecated alias for
each_byte. -
#each(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#each_byte ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#each_char ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#each_line(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#eof ⇒ Object
Returns +true+ or +false+ whether the stream has reached the end.
-
#eof? ⇒ Boolean
Returns +true+ or +false+ whether the stream has reached the end.
-
#external_encoding ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#getbyte ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#getc ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#gets(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#initialize(*args) ⇒ Object
constructor
call-seq: Zstdlib::GzipReader.new(io, options = {}).
-
#lineno ⇒ Object
The line number of the last row read from this file.
-
#lineno=(lineno) ⇒ Object
Specify line number of the last row read from this file.
-
#lines(*args) ⇒ Object
This is a deprecated alias for
each_line. -
#pos ⇒ Object
Total number of output bytes output so far.
-
#read(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#readbyte ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#readchar ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#readline(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#readlines(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#readpartial(*args) ⇒ Object
call-seq: gzipreader.readpartial(maxlen [, outbuf]) => string, outbuf.
-
#rewind ⇒ Object
Resets the position of the file pointer to the point created the GzipReader object.
-
#tell ⇒ Object
Total number of output bytes output so far.
-
#ungetbyte(ch) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#ungetc(s) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
-
#unused ⇒ Object
Returns the rest of the data which had read for parsing gzip format, or +nil+ if the whole gzip file is not parsed yet.
Methods inherited from GzipFile
#close, #closed?, #comment, #crc, #finish, #level, #mtime, #orig_name, #os_code, #sync, #sync=, #to_io, wrap
Constructor Details
#initialize(*args) ⇒ Object
call-seq: Zstdlib::GzipReader.new(io, options = {})
Creates a GzipReader object associated with +io+. The GzipReader object reads gzipped data from +io+, and parses/decompresses it. The +io+ must have a +read+ method that behaves same as the IO#read.
The +options+ hash may be used to set the encoding of the data. +:external_encoding+, +:internal_encoding+ and +:encoding+ may be set as in IO::new.
If the gzip file header is incorrect, raises an Zstdlib::GzipFile::Error exception.
3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3757
static VALUE
rb_gzreader_initialize(int argc, VALUE *argv, VALUE obj)
{
VALUE io, opt = Qnil;
struct gzfile *gz;
int err;
TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz);
rb_scan_args(argc, argv, "1:", &io, &opt);
/* this is undocumented feature of zlib */
err = inflateInit2(&gz->z.stream, -MAX_WBITS);
if (err != Z_OK) {
raise_zlib_error(err, gz->z.stream.msg);
}
gz->io = io;
ZSTREAM_READY(&gz->z);
gzfile_read_header(gz, Qnil);
rb_gzfile_ecopts(gz, opt);
if (rb_respond_to(io, id_path)) {
gz->path = rb_funcall(gz->io, id_path, 0);
rb_define_singleton_method(obj, "path", rb_gzfile_path, 0);
}
return obj;
}
|
Class Method Details
.open(*args) ⇒ Object
call-seq: Zstdlib::GzipReader.open(filename) {|gz| ... }
Opens a file specified by +filename+ as a gzipped file, and returns a GzipReader object associated with that file. Further details of this method are in Zstdlib::GzipReader.new and ZLib::GzipFile.wrap.
3734 3735 3736 3737 3738 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3734
static VALUE
rb_gzreader_s_open(int argc, VALUE *argv, VALUE klass)
{
return gzfile_s_open(argc, argv, klass, "rb");
}
|
Instance Method Details
#bytes ⇒ Object
This is a deprecated alias for each_byte.
3971 3972 3973 3974 3975 3976 3977 3978 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3971
static VALUE
rb_gzreader_bytes(VALUE obj)
{
rb_warn("Zstdlib::GzipReader#bytes is deprecated; use #each_byte instead");
if (!rb_block_given_p())
return rb_enumeratorize(obj, ID2SYM(rb_intern("each_byte")), 0, 0);
return rb_gzreader_each_byte(obj);
}
|
#each(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4239
static VALUE
rb_gzreader_each(int argc, VALUE *argv, VALUE obj)
{
VALUE str;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {
rb_yield(str);
}
return obj;
}
|
#each_byte ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3953
static VALUE
rb_gzreader_each_byte(VALUE obj)
{
VALUE c;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(c = rb_gzreader_getbyte(obj))) {
rb_yield(c);
}
return Qnil;
}
|
#each_char ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3935
static VALUE
rb_gzreader_each_char(VALUE obj)
{
VALUE c;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(c = rb_gzreader_getc(obj))) {
rb_yield(c);
}
return Qnil;
}
|
#each_line(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4239
static VALUE
rb_gzreader_each(int argc, VALUE *argv, VALUE obj)
{
VALUE str;
RETURN_ENUMERATOR(obj, 0, 0);
while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {
rb_yield(str);
}
return obj;
}
|
#eof ⇒ Object
Returns +true+ or +false+ whether the stream has reached the end.
3374 3375 3376 3377 3378 3379 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3374
static VALUE
rb_gzfile_eof_p(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return GZFILE_IS_FINISHED(gz) ? Qtrue : Qfalse;
}
|
#eof? ⇒ Boolean
Returns +true+ or +false+ whether the stream has reached the end.
3374 3375 3376 3377 3378 3379 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3374
static VALUE
rb_gzfile_eof_p(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return GZFILE_IS_FINISHED(gz) ? Qtrue : Qfalse;
}
|
#external_encoding ⇒ Object
See Zstdlib::GzipReader documentation for a description.
4287 4288 4289 4290 4291 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4287
static VALUE
rb_gzreader_external_encoding(VALUE self)
{
return rb_enc_from_encoding(get_gzfile(self)->enc);
}
|
#getbyte ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3901
static VALUE
rb_gzreader_getbyte(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
VALUE dst;
dst = gzfile_read(gz, 1);
if (!NIL_P(dst)) {
dst = INT2FIX((unsigned int)(RSTRING_PTR(dst)[0]) & 0xff);
}
return dst;
}
|
#getc ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3872 3873 3874 3875 3876 3877 3878 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3872
static VALUE
rb_gzreader_getc(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
return gzfile_getc(gz);
}
|
#gets(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4207
static VALUE
rb_gzreader_gets(int argc, VALUE *argv, VALUE obj)
{
VALUE dst;
dst = gzreader_gets(argc, argv, obj);
if (!NIL_P(dst)) {
rb_lastline_set(dst);
}
return dst;
}
|
#lineno ⇒ Object
The line number of the last row read from this file.
3213 3214 3215 3216 3217 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3213
static VALUE
rb_gzfile_lineno(VALUE obj)
{
return INT2NUM(get_gzfile(obj)->lineno);
}
|
#lineno=(lineno) ⇒ Object
Specify line number of the last row read from this file.
3224 3225 3226 3227 3228 3229 3230 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3224
static VALUE
rb_gzfile_set_lineno(VALUE obj, VALUE lineno)
{
struct gzfile *gz = get_gzfile(obj);
gz->lineno = NUM2INT(lineno);
return lineno;
}
|
#lines(*args) ⇒ Object
This is a deprecated alias for each_line.
4257 4258 4259 4260 4261 4262 4263 4264 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4257
static VALUE
rb_gzreader_lines(int argc, VALUE *argv, VALUE obj)
{
rb_warn("Zstdlib::GzipReader#lines is deprecated; use #each_line instead");
if (!rb_block_given_p())
return rb_enumeratorize(obj, ID2SYM(rb_intern("each_line")), argc, argv);
return rb_gzreader_each(argc, argv, obj);
}
|
#pos ⇒ Object
Total number of output bytes output so far.
3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3432
static VALUE
rb_gzfile_total_out(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
uLong total_out = gz->z.stream.total_out;
long buf_filled = ZSTREAM_BUF_FILLED(&gz->z);
if (total_out >= (uLong)buf_filled) {
return rb_uint2inum(total_out - buf_filled);
} else {
return LONG2FIX(-(buf_filled - (long)total_out));
}
}
|
#read(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3818
static VALUE
rb_gzreader_read(int argc, VALUE *argv, VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
VALUE vlen;
long len;
rb_scan_args(argc, argv, "01", &vlen);
if (NIL_P(vlen)) {
return gzfile_read_all(gz);
}
len = NUM2INT(vlen);
if (len < 0) {
rb_raise(rb_eArgError, "negative length %ld given", len);
}
return gzfile_read(gz, len);
}
|
#readbyte ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3919
static VALUE
rb_gzreader_readbyte(VALUE obj)
{
VALUE dst;
dst = rb_gzreader_getbyte(obj);
if (NIL_P(dst)) {
rb_raise(rb_eEOFError, "end of file reached");
}
return dst;
}
|
#readchar ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3885
static VALUE
rb_gzreader_readchar(VALUE obj)
{
VALUE dst;
dst = rb_gzreader_getc(obj);
if (NIL_P(dst)) {
rb_raise(rb_eEOFError, "end of file reached");
}
return dst;
}
|
#readline(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4223
static VALUE
rb_gzreader_readline(int argc, VALUE *argv, VALUE obj)
{
VALUE dst;
dst = rb_gzreader_gets(argc, argv, obj);
if (NIL_P(dst)) {
rb_raise(rb_eEOFError, "end of file reached");
}
return dst;
}
|
#readlines(*args) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4271
static VALUE
rb_gzreader_readlines(int argc, VALUE *argv, VALUE obj)
{
VALUE str, dst;
dst = rb_ary_new();
while (!NIL_P(str = gzreader_gets(argc, argv, obj))) {
rb_ary_push(dst, str);
}
return dst;
}
|
#readpartial(*args) ⇒ Object
call-seq: gzipreader.readpartial(maxlen [, outbuf]) => string, outbuf
Reads at most maxlen bytes from the gziped stream but
it blocks only if gzipreader has no data immediately available.
If the optional outbuf argument is present,
it must reference a String, which will receive the data.
It raises EOFError on end of file.
3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3849
static VALUE
rb_gzreader_readpartial(int argc, VALUE *argv, VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
VALUE vlen, outbuf;
long len;
rb_scan_args(argc, argv, "11", &vlen, &outbuf);
len = NUM2INT(vlen);
if (len < 0) {
rb_raise(rb_eArgError, "negative length %ld given", len);
}
if (!NIL_P(outbuf))
Check_Type(outbuf, T_STRING);
return gzfile_readpartial(gz, len, outbuf);
}
|
#rewind ⇒ Object
Resets the position of the file pointer to the point created the GzipReader object. The associated IO object needs to respond to the +seek+ method.
3791 3792 3793 3794 3795 3796 3797 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3791
static VALUE
rb_gzreader_rewind(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
gzfile_reader_rewind(gz);
return INT2FIX(0);
}
|
#tell ⇒ Object
Total number of output bytes output so far.
3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3432
static VALUE
rb_gzfile_total_out(VALUE obj)
{
struct gzfile *gz = get_gzfile(obj);
uLong total_out = gz->z.stream.total_out;
long buf_filled = ZSTREAM_BUF_FILLED(&gz->z);
if (total_out >= (uLong)buf_filled) {
return rb_uint2inum(total_out - buf_filled);
} else {
return LONG2FIX(-(buf_filled - (long)total_out));
}
}
|
#ungetbyte(ch) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
4007 4008 4009 4010 4011 4012 4013 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 4007
static VALUE
rb_gzreader_ungetbyte(VALUE obj, VALUE ch)
{
struct gzfile *gz = get_gzfile(obj);
gzfile_ungetbyte(gz, NUM2CHR(ch));
return Qnil;
}
|
#ungetc(s) ⇒ Object
See Zstdlib::GzipReader documentation for a description.
3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3985
static VALUE
rb_gzreader_ungetc(VALUE obj, VALUE s)
{
struct gzfile *gz;
if (FIXNUM_P(s))
return rb_gzreader_ungetbyte(obj, s);
gz = get_gzfile(obj);
StringValue(s);
if (gz->enc2 && gz->enc2 != rb_ascii8bit_encoding()) {
s = rb_str_conv_enc(s, rb_enc_get(s), gz->enc2);
}
gzfile_ungets(gz, (const Bytef*)RSTRING_PTR(s), RSTRING_LEN(s));
RB_GC_GUARD(s);
return Qnil;
}
|
#unused ⇒ Object
Returns the rest of the data which had read for parsing gzip format, or +nil+ if the whole gzip file is not parsed yet.
3805 3806 3807 3808 3809 3810 3811 |
# File 'ext/zstdlib/ruby/zlib-2.7/zstdlib.c', line 3805
static VALUE
rb_gzreader_unused(VALUE obj)
{
struct gzfile *gz;
TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz);
return gzfile_reader_get_unused(gz);
}
|