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.