def initialize io
::Fixnum.module_eval do
def isbitset? bit_to_check
if self & (2 ** bit_to_check) == (2 ** bit_to_check) then true else false end
end
end
super()
@io = io
io.read.each_byte {|b| @input_buffer << b}
if @input_buffer[@in_pos+=1] != 0x1f || @input_buffer[@in_pos+=1] != 0x8b then raise Zlib::GzipFile::Error.new("not in gzip format") end
if @input_buffer[@in_pos+=1] != 0x08 then raise Zlib::GzipFile::Error.new("unknown compression method") end
flg = @input_buffer[@in_pos+=1]
@ftext = flg.isbitset? 0
@fhcrc = flg.isbitset? 1
@fextra = flg.isbitset? 2
@fname = flg.isbitset? 3
@fcomment = flg.isbitset? 4
@mtime = Time.at(@input_buffer[@in_pos+=1] | (@input_buffer[@in_pos+=1] << 8) | (@input_buffer[@in_pos+=1] << 16) | (@input_buffer[@in_pos+=1] << 24))
@xfl = @input_buffer[@in_pos+=1]
@os = OSES[@input_buffer[@in_pos+=1]]
if @fextra then
@xlen = (@input_buffer[@in_pos+=1] | (@input_buffer[@in_pos+=1] << 8))
@xtra_field = []
@xlen.times {@xtra_field << @input_buffer[@in_pos+=1]}
end
if @fname then
@original_name = ""
until @original_name["\00""].nil? == false
@original_name.concat(@input_buffer[@in_pos+=1])
end
@original_name.chop!
end
if @fcomment then
@comment = ""
until @comment["\00""].nil? == false
@comment.concat(@input_buffer[@in_pos+=1])
end
@comment.chop!
end
if @fhcrc then
@header_crc = @input_buffer[@in_pos+=1] | (@input_buffer[@in_pos+=1] << 8)
end
@contents = ""
until @in_pos == @input_buffer.length-1
@contents.concat(@input_buffer[@in_pos+=1])
end
@zstream = Zlib::Inflate.new -MAX_WBITS
@inflated = StringIO.new(@zstream.inflate @contents)
end