Object
A header for a tar file
Fields in the tar header
Pack format for a tar header
Unpack format for a tar header
Creates a tar header from IO stream
# File lib/rubygems/package/tar_header.rb, line 99
99: def self.from(stream)
100: header = stream.read 512
101: empty = (header == "\00"" * 512)
102:
103: fields = header.unpack UNPACK_FORMAT
104:
105: name = fields.shift
106: mode = fields.shift.oct
107: uid = fields.shift.oct
108: gid = fields.shift.oct
109: size = fields.shift.oct
110: mtime = fields.shift.oct
111: checksum = fields.shift.oct
112: typeflag = fields.shift
113: linkname = fields.shift
114: magic = fields.shift
115: version = fields.shift.oct
116: uname = fields.shift
117: gname = fields.shift
118: devmajor = fields.shift.oct
119: devminor = fields.shift.oct
120: prefix = fields.shift
121:
122: new :name => name,
123: :mode => mode,
124: :uid => uid,
125: :gid => gid,
126: :size => size,
127: :mtime => mtime,
128: :checksum => checksum,
129: :typeflag => typeflag,
130: :linkname => linkname,
131: :magic => magic,
132: :version => version,
133: :uname => uname,
134: :gname => gname,
135: :devmajor => devmajor,
136: :devminor => devminor,
137: :prefix => prefix,
138:
139: :empty => empty
140:
141: # HACK unfactor for Rubinius
142: #new :name => fields.shift,
143: # :mode => fields.shift.oct,
144: # :uid => fields.shift.oct,
145: # :gid => fields.shift.oct,
146: # :size => fields.shift.oct,
147: # :mtime => fields.shift.oct,
148: # :checksum => fields.shift.oct,
149: # :typeflag => fields.shift,
150: # :linkname => fields.shift,
151: # :magic => fields.shift,
152: # :version => fields.shift.oct,
153: # :uname => fields.shift,
154: # :gname => fields.shift,
155: # :devmajor => fields.shift.oct,
156: # :devminor => fields.shift.oct,
157: # :prefix => fields.shift,
158:
159: # :empty => empty
160: end
Creates a new TarHeader using vals
# File lib/rubygems/package/tar_header.rb, line 165
165: def initialize(vals)
166: unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode] then
167: raise ArgumentError, ":name, :size, :prefix and :mode required"
168: end
169:
170: vals[:uid] ||= 0
171: vals[:gid] ||= 0
172: vals[:mtime] ||= 0
173: vals[:checksum] ||= ""
174: vals[:typeflag] ||= "0"
175: vals[:magic] ||= "ustar"
176: vals[:version] ||= "00"
177: vals[:uname] ||= "wheel"
178: vals[:gname] ||= "wheel"
179: vals[:devmajor] ||= 0
180: vals[:devminor] ||= 0
181:
182: FIELDS.each do |name|
183: instance_variable_set "@#{name}", vals[name]
184: end
185:
186: @empty = vals[:empty]
187: end
# File lib/rubygems/package/tar_header.rb, line 231
231: def calculate_checksum(header)
232: header.unpack("C*").inject { |a, b| a + b }
233: end
# File lib/rubygems/package/tar_header.rb, line 235
235: def header(checksum = @checksum)
236: header = [
237: name,
238: oct(mode, 7),
239: oct(uid, 7),
240: oct(gid, 7),
241: oct(size, 11),
242: oct(mtime, 11),
243: checksum,
244: " ",
245: typeflag,
246: linkname,
247: magic,
248: oct(version, 2),
249: uname,
250: gname,
251: oct(devmajor, 7),
252: oct(devminor, 7),
253: prefix
254: ]
255:
256: header = header.pack PACK_FORMAT
257:
258: header << ("\00"" * ((512 - header.size) % 512))
259: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.