class Gem::Package::TarReader::Entry

Class for reading entries out of a tar file

Attributes

header[R]

Header for this tar entry

Public Class Methods

new(header, io) click to toggle source

Creates a new tar entry for header that will be read from io

# File lib/rubygems/package/tar_reader/entry.rb, line 19
def initialize(header, io)
  @closed = false
  @header = header
  @io = io
  @orig_pos = @io.pos
  @read = 0
end

Public Instance Methods

bytes_read() click to toggle source

Number of bytes read out of the tar entry

# File lib/rubygems/package/tar_reader/entry.rb, line 34
def bytes_read
  @read
end
close() click to toggle source

Closes the tar entry

# File lib/rubygems/package/tar_reader/entry.rb, line 41
def close
  @closed = true
end
closed?() click to toggle source

Is the tar entry closed?

# File lib/rubygems/package/tar_reader/entry.rb, line 48
def closed?
  @closed
end
directory?() click to toggle source

Is this tar entry a directory?

# File lib/rubygems/package/tar_reader/entry.rb, line 93
def directory?
  @header.typeflag == "5"
end
eof?() click to toggle source

Are we at the end of the tar entry?

# File lib/rubygems/package/tar_reader/entry.rb, line 55
def eof?
  check_closed

  @read >= @header.size
end
file?() click to toggle source

Is this tar entry a file?

# File lib/rubygems/package/tar_reader/entry.rb, line 100
def file?
  @header.typeflag == "0"
end
full_name() click to toggle source

Full name of the tar entry

# File lib/rubygems/package/tar_reader/entry.rb, line 64
def full_name
  if @header.prefix != ""
    File.join @header.prefix, @header.name
  else
    @header.name
  end
rescue ArgumentError => e
  raise unless e.message == "string contains null byte"
  raise Gem::Package::TarInvalidError,
        "tar is corrupt, name contains null byte"
end
getc() click to toggle source

Read one byte from the tar entry

# File lib/rubygems/package/tar_reader/entry.rb, line 79
def getc
  check_closed

  return nil if @read >= @header.size

  ret = @io.getc
  @read += 1 if ret

  ret
end
length()
Alias for: size
pos() click to toggle source

The position in the tar entry

# File lib/rubygems/package/tar_reader/entry.rb, line 114
def pos
  check_closed

  bytes_read
end
read(len = nil) click to toggle source

Reads len bytes from the tar file entry, or the rest of the entry if nil

# File lib/rubygems/package/tar_reader/entry.rb, line 130
def read(len = nil)
  check_closed

  return nil if @read >= @header.size

  len ||= @header.size - @read
  max_read = [len, @header.size - @read].min

  ret = @io.read max_read
  @read += ret.size

  ret
end
readpartial(maxlen = nil, outbuf = "".b) click to toggle source
# File lib/rubygems/package/tar_reader/entry.rb, line 144
def readpartial(maxlen = nil, outbuf = "".b)
  check_closed

  raise EOFError if @read >= @header.size

  maxlen ||= @header.size - @read
  max_read = [maxlen, @header.size - @read].min

  @io.readpartial(max_read, outbuf)
  @read += outbuf.size

  outbuf
end
rewind() click to toggle source

Rewinds to the beginning of the tar file entry

# File lib/rubygems/package/tar_reader/entry.rb, line 161
def rewind
  check_closed

  @io.pos = @orig_pos
  @read = 0
end
size() click to toggle source
# File lib/rubygems/package/tar_reader/entry.rb, line 120
def size
  @header.size
end
Also aliased as: length