Class: Gem::Package::TarReader::Entry
- Inherits:
-
Object
- Object
- Gem::Package::TarReader::Entry
- Defined in:
- lib/rubygems/package/tar_reader/entry.rb
Overview
Class for reading entries out of a tar file
Instance Attribute Summary collapse
-
#header ⇒ Object
readonly
Header for this tar entry.
Instance Method Summary collapse
-
#bytes_read ⇒ Object
Number of bytes read out of the tar entry.
-
#check_closed ⇒ Object
:nodoc:.
-
#close ⇒ Object
Closes the tar entry.
-
#closed? ⇒ Boolean
Is the tar entry closed?.
-
#directory? ⇒ Boolean
Is this tar entry a directory?.
-
#eof? ⇒ Boolean
Are we at the end of the tar entry?.
-
#file? ⇒ Boolean
Is this tar entry a file?.
-
#full_name ⇒ Object
Full name of the tar entry.
-
#getc ⇒ Object
Read one byte from the tar entry.
-
#initialize(header, io) ⇒ Entry
constructor
Creates a new tar entry for
header
that will be read fromio
. -
#pos ⇒ Object
The position in the tar entry.
-
#read(len = nil) ⇒ Object
Reads
len
bytes from the tar file entry, or the rest of the entry if nil. - #readpartial(maxlen = nil, outbuf = "".b) ⇒ Object
-
#rewind ⇒ Object
Rewinds to the beginning of the tar file entry.
- #size ⇒ Object (also: #length)
-
#symlink? ⇒ Boolean
Is this tar entry a symlink?.
Constructor Details
#initialize(header, io) ⇒ Entry
Creates a new tar entry for header
that will be read from io
21 22 23 24 25 26 27 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 21 def initialize(header, io) @closed = false @header = header @io = io @orig_pos = @io.pos @read = 0 end |
Instance Attribute Details
#header ⇒ Object (readonly)
Header for this tar entry
16 17 18 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 16 def header @header end |
Instance Method Details
#bytes_read ⇒ Object
Number of bytes read out of the tar entry
36 37 38 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 36 def bytes_read @read end |
#check_closed ⇒ Object
:nodoc:
29 30 31 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 29 def check_closed # :nodoc: raise IOError, "closed #{self.class}" if closed? end |
#close ⇒ Object
Closes the tar entry
43 44 45 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 43 def close @closed = true end |
#closed? ⇒ Boolean
Is the tar entry closed?
50 51 52 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 50 def closed? @closed end |
#directory? ⇒ Boolean
Is this tar entry a directory?
95 96 97 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 95 def directory? @header.typeflag == "5" end |
#eof? ⇒ Boolean
Are we at the end of the tar entry?
57 58 59 60 61 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 57 def eof? check_closed @read >= @header.size end |
#file? ⇒ Boolean
Is this tar entry a file?
102 103 104 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 102 def file? @header.typeflag == "0" end |
#full_name ⇒ Object
Full name of the tar entry
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 66 def full_name if @header.prefix != "" File.join @header.prefix, @header.name else @header.name end rescue ArgumentError => e raise unless e. == 'string contains null byte' raise Gem::Package::TarInvalidError, 'tar is corrupt, name contains null byte' end |
#getc ⇒ Object
Read one byte from the tar entry
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 81 def getc check_closed return nil if @read >= @header.size ret = @io.getc @read += 1 if ret ret end |
#pos ⇒ Object
The position in the tar entry
116 117 118 119 120 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 116 def pos check_closed bytes_read end |
#read(len = nil) ⇒ Object
Reads len
bytes from the tar file entry, or the rest of the entry if nil
132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 132 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) ⇒ Object
146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 146 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 ⇒ Object
Rewinds to the beginning of the tar file entry
163 164 165 166 167 168 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 163 def rewind check_closed @io.pos = @orig_pos @read = 0 end |
#size ⇒ Object Also known as: length
122 123 124 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 122 def size @header.size end |
#symlink? ⇒ Boolean
Is this tar entry a symlink?
109 110 111 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 109 def symlink? @header.typeflag == "2" end |