diff options
Diffstat (limited to 'lib/rubygems/package/tar_reader/entry.rb')
-rw-r--r-- | lib/rubygems/package/tar_reader/entry.rb | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/lib/rubygems/package/tar_reader/entry.rb b/lib/rubygems/package/tar_reader/entry.rb index dcc66153d8..eeb70bf000 100644 --- a/lib/rubygems/package/tar_reader/entry.rb +++ b/lib/rubygems/package/tar_reader/entry.rb @@ -3,12 +3,19 @@ # See LICENSE.txt for additional licensing information. #-- -require 'rubygems/package' +## +# Class for reading entries out of a tar file class Gem::Package::TarReader::Entry + ## + # Header for this tar entry + attr_reader :header + ## + # Creates a new tar entry for +header+ that will be read from +io+ + def initialize(header, io) @closed = false @header = header @@ -21,24 +28,39 @@ class Gem::Package::TarReader::Entry raise IOError, "closed #{self.class}" if closed? end + ## + # Number of bytes read out of the tar entry + def bytes_read @read end + ## + # Closes the tar entry + def close @closed = true end + ## + # Is the tar entry closed? + def closed? @closed end + ## + # Are we at the end of the tar entry? + def eof? check_closed @read >= @header.size end + ## + # Full name of the tar entry + def full_name if @header.prefix != "" then File.join @header.prefix, @header.name @@ -47,6 +69,9 @@ class Gem::Package::TarReader::Entry end end + ## + # Read one byte from the tar entry + def getc check_closed @@ -58,20 +83,33 @@ class Gem::Package::TarReader::Entry ret end + ## + # Is this tar entry a directory? + def directory? @header.typeflag == "5" end + ## + # Is this tar entry a file? + def file? @header.typeflag == "0" end + ## + # The position in the tar entry + def pos check_closed bytes_read end + ## + # Reads +len+ bytes from the tar file entry, or the rest of the entry if + # nil + def read(len = nil) check_closed @@ -86,6 +124,9 @@ class Gem::Package::TarReader::Entry ret end + ## + # Rewinds to the beginning of the tar file entry + def rewind check_closed |