The class that reads a tar format archive from a data stream. The data stream may be sequential or random access, but certain features only work with random access data streams.

Methods
close each each_entry new open rewind
Public Class methods
new(anIO)

Creates and returns a new Reader object.

# File lib/more/facets/minitar.rb, line 662
    def initialize(anIO)
      @io     = anIO
      @init_pos = anIO.pos
    end
open(anIO) {|reader| ...}

With no associated block, +Reader::open+ is a synonym for +Reader::new+. If the optional code block is given, it will be passed the new writer as an argument and the Reader object will automatically be closed when the block terminates. In this instance, +Reader::open+ returns the value of the block.

# File lib/more/facets/minitar.rb, line 647
    def self.open(anIO)
      reader = Reader.new(anIO)

      return reader unless block_given?

      begin
        res = yield reader
      ensure
        reader.close
      end

      res
    end
Public Instance methods
close()
# File lib/more/facets/minitar.rb, line 717
    def close
    end
each(&block)

Iterates through each entry in the data stream.

# File lib/more/facets/minitar.rb, line 668
    def each(&block)
      each_entry(&block)
    end
each_entry() {|entry| ...}

Iterates through each entry in the data stream.

# File lib/more/facets/minitar.rb, line 686
    def each_entry
      loop do
        return if @io.eof?

        header = Archive::Tar::PosixHeader.new_from_stream(@io)
        return if header.empty?

        entry = EntryStream.new(header, @io)
        size  = entry.size

        yield entry

        skip = (512 - (size % 512)) % 512

        if @io.respond_to?(:seek)
            # avoid reading...
          @io.seek(size - entry.bytes_read, IO::SEEK_CUR)
        else
          pending = size - entry.bytes_read
          while pending > 0
            bread = @io.read([pending, 4096].min).size
            raise UnexpectedEOF if @io.eof?
            pending -= bread
          end
        end
        @io.read(skip) # discard trailing zeros
          # make sure nobody can use #read, #getc or #rewind anymore
        entry.close
      end
    end
rewind()

Resets the read pointer to the beginning of data stream. Do not call this during a each or each_entry iteration. This only works with random access data streams that respond to rewind and pos.

# File lib/more/facets/minitar.rb, line 675
    def rewind
      if @init_pos == 0
        raise NonSeekableStream unless @io.respond_to?(:rewind)
        @io.rewind
      else
        raise NonSeekableStream unless @io.respond_to?(:pos=)
        @io.pos = @init_pos
      end
    end