class RHC::Vendor::Zlib::GzipReader

Constants

OSES

Public Class Methods

new(io) click to toggle source
# 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["\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

  #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