class GZippedTar::Tar::Entry

++

Original source is copyright (C) 2004 Mauricio Julio Fernández Pradier
This file has been copied and adapted to avoid reliance on differing
behaviour across versions of rubygems, and to handle nil header values at
the end of a file.

Attributes

header[R]

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/gzipped_tar/tar/entry.rb, line 14
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/gzipped_tar/tar/entry.rb, line 27
def bytes_read
  @read
end
close() click to toggle source

Closes the tar entry

# File lib/gzipped_tar/tar/entry.rb, line 32
def close
  @closed = true
end
closed?() click to toggle source

Is the tar entry closed?

# File lib/gzipped_tar/tar/entry.rb, line 37
def closed?
  @closed
end
directory?() click to toggle source

Is this tar entry a directory?

# File lib/gzipped_tar/tar/entry.rb, line 74
def directory?
  @header.typeflag == "5"
end
eof?() click to toggle source

Are we at the end of the tar entry?

# File lib/gzipped_tar/tar/entry.rb, line 42
def eof?
  check_closed

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

Is this tar entry a file?

# File lib/gzipped_tar/tar/entry.rb, line 79
def file?
  @header.typeflag == "0"
end
full_name() click to toggle source

Full name of the tar entry

# File lib/gzipped_tar/tar/entry.rb, line 49
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 GZippedTar::Tar::TarInvalidError,
    "tar is corrupt, name contains null byte"
end
getc() click to toggle source

Read one byte from the tar entry

# File lib/gzipped_tar/tar/entry.rb, line 62
def getc
  check_closed

  return nil if @read >= @header.size

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

  ret
end
pos() click to toggle source

The position in the tar entry

# File lib/gzipped_tar/tar/entry.rb, line 89
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/gzipped_tar/tar/entry.rb, line 97
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
Also aliased as: readpartial
readpartial(len = nil)
Alias for: read
rewind() click to toggle source

Rewinds to the beginning of the tar file entry

# File lib/gzipped_tar/tar/entry.rb, line 114
def rewind
  check_closed

  raise GZippedTar::Tar::NonSeekableIO unless @io.respond_to? :pos=

  @io.pos = @orig_pos
  @read = 0
end