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
19 20 21 22 23 24 25 |
# 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 |
Instance Attribute Details
#header ⇒ Object (readonly)
Header for this tar entry
14 15 16 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 14 def header @header end |
Instance Method Details
#bytes_read ⇒ Object
Number of bytes read out of the tar entry
34 35 36 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 34 def bytes_read @read end |
#check_closed ⇒ Object
:nodoc:
27 28 29 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 27 def check_closed # :nodoc: raise IOError, "closed #{self.class}" if closed? end |
#close ⇒ Object
Closes the tar entry
41 42 43 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 41 def close @closed = true end |
#closed? ⇒ Boolean
Is the tar entry closed?
48 49 50 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 48 def closed? @closed end |
#directory? ⇒ Boolean
Is this tar entry a directory?
93 94 95 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 93 def directory? @header.typeflag == "5" end |
#eof? ⇒ Boolean
Are we at the end of the tar entry?
55 56 57 58 59 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 55 def eof? check_closed @read >= @header.size end |
#file? ⇒ Boolean
Is this tar entry a file?
100 101 102 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 100 def file? @header.typeflag == "0" end |
#full_name ⇒ Object
Full name of the tar entry
64 65 66 67 68 69 70 71 72 73 74 |
# 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. == "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
79 80 81 82 83 84 85 86 87 88 |
# 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 |
#pos ⇒ Object
The position in the tar entry
114 115 116 117 118 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 114 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
130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 130 def read(len = nil) check_closed len ||= @header.size - @read return nil if len > 0 && @read >= @header.size max_read = [len, @header.size - @read].min ret = @io.read max_read @read += ret.size ret end |
#readpartial(maxlen = nil, outbuf = "".b) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 145 def readpartial(maxlen = nil, outbuf = "".b) check_closed maxlen ||= @header.size - @read raise EOFError if maxlen > 0 && @read >= @header.size 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
120 121 122 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 120 def size @header.size end |
#symlink? ⇒ Boolean
Is this tar entry a symlink?
107 108 109 |
# File 'lib/rubygems/package/tar_reader/entry.rb', line 107 def symlink? @header.typeflag == "2" end |