Method: Zip::ZipEntry#get_input_stream

Defined in:
lib/ruby_archive/handlers/rubyzip/zip/zip.rb

#get_input_stream(&aProc) ⇒ Object

Returns an IO like object for the given ZipEntry. Warning: may behave weird with symlinks.



765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
# File 'lib/ruby_archive/handlers/rubyzip/zip/zip.rb', line 765

def get_input_stream(&aProc)
  if @ftype == :directory
      return yield(NullInputStream.instance) if block_given?
      return NullInputStream.instance
  elsif @filepath
    case @ftype
    when :file
      return File.open(@filepath, "rb", &aProc)

    when :symlink
      linkpath = File::readlink(@filepath)
      stringio = StringIO.new(linkpath)
      return yield(stringio) if block_given?
      return stringio
    else
      raise "unknown @ftype #{@ftype}"
    end
  else
    zis = ZipInputStream.new(@zipfile, localHeaderOffset)
    zis.get_next_entry
    if block_given?
      begin
 return yield(zis)
    ensure
 zis.close
    end
    else
    return zis
    end
  end
end