class RHC::Vendor::Zlib::GzipReader
Constants
- OSES
Public Class Methods
new(io)
click to toggle source
Calls superclass method
RHC::Vendor::Zlib::GzipFile.new
# File lib/rhc/vendor/zliby.rb, line 528 def initialize io #Add a helper method to check bits ::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["\0"].nil? == false @original_name.concat(@input_buffer[@in_pos+=1]) end @original_name.chop! end if @fcomment then @comment = "" until @comment["\0"].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 #we do raw deflate, no headers @zstream = Zlib::Inflate.new -MAX_WBITS @inflated = StringIO.new(@zstream.inflate @contents) end
open(filename) { |gz else gz end| ... }
click to toggle source
# File lib/rhc/vendor/zliby.rb, line 603 def open filename io = File.open filename, 'rb' gz = self.new io if block_given? then yield gz else gz end end end
Public Instance Methods
eof?()
click to toggle source
# File lib/rhc/vendor/zliby.rb, line 588 def eof? @inflated.eof? end
isbitset?(bit_to_check)
click to toggle source
# File lib/rhc/vendor/zliby.rb, line 532 def isbitset? bit_to_check if self & (2 ** bit_to_check) == (2 ** bit_to_check) then true else false end end
pos()
click to toggle source
# File lib/rhc/vendor/zliby.rb, line 592 def pos @inflated.pos end
read(length=nil)
click to toggle source
# File lib/rhc/vendor/zliby.rb, line 584 def read length=nil @inflated.read length end
rewind()
click to toggle source
# File lib/rhc/vendor/zliby.rb, line 596 def rewind @inflated.rewind @io.seek 0, IO::SEEK_SET end