Class | Gem::Package::TarHeader |
In: |
lib/rubygems/package/tar_header.rb
|
Parent: | Object |
A header for a tar file
FIELDS | = | [ :checksum, :devmajor, :devminor, :gid, :gname, :linkname, :magic, :mode, :mtime, :name, :prefix, :size, :typeflag, :uid, :uname, :version, ] | Fields in the tar header | |
PACK_FORMAT | = | 'a100' + # name 'a8' + # mode 'a8' + # uid 'a8' + # gid 'a12' + # size 'a12' + # mtime 'a7a' + # chksum 'a' + # typeflag 'a100' + # linkname 'a6' + # magic 'a2' + # version 'a32' + # uname 'a32' + # gname 'a8' + # devmajor 'a8' + # devminor 'a155' | Pack format for a tar header | |
UNPACK_FORMAT | = | 'A100' + # name 'A8' + # mode 'A8' + # uid 'A8' + # gid 'A12' + # size 'A12' + # mtime 'A8' + # checksum 'A' + # typeflag 'A100' + # linkname 'A6' + # magic 'A2' + # version 'A32' + # uname 'A32' + # gname 'A8' + # devmajor 'A8' + # devminor 'A155' | Unpack format for a tar header |
Creates a tar header from IO stream
# File lib/rubygems/package/tar_header.rb, line 98 98: def self.from(stream) 99: header = stream.read 512 100: empty = (header == "\0" * 512) 101: 102: fields = header.unpack UNPACK_FORMAT 103: 104: name = fields.shift 105: mode = fields.shift.oct 106: uid = fields.shift.oct 107: gid = fields.shift.oct 108: size = fields.shift.oct 109: mtime = fields.shift.oct 110: checksum = fields.shift.oct 111: typeflag = fields.shift 112: linkname = fields.shift 113: magic = fields.shift 114: version = fields.shift.oct 115: uname = fields.shift 116: gname = fields.shift 117: devmajor = fields.shift.oct 118: devminor = fields.shift.oct 119: prefix = fields.shift 120: 121: new :name => name, 122: :mode => mode, 123: :uid => uid, 124: :gid => gid, 125: :size => size, 126: :mtime => mtime, 127: :checksum => checksum, 128: :typeflag => typeflag, 129: :linkname => linkname, 130: :magic => magic, 131: :version => version, 132: :uname => uname, 133: :gname => gname, 134: :devmajor => devmajor, 135: :devminor => devminor, 136: :prefix => prefix, 137: 138: :empty => empty 139: 140: # HACK unfactor for Rubinius 141: #new :name => fields.shift, 142: # :mode => fields.shift.oct, 143: # :uid => fields.shift.oct, 144: # :gid => fields.shift.oct, 145: # :size => fields.shift.oct, 146: # :mtime => fields.shift.oct, 147: # :checksum => fields.shift.oct, 148: # :typeflag => fields.shift, 149: # :linkname => fields.shift, 150: # :magic => fields.shift, 151: # :version => fields.shift.oct, 152: # :uname => fields.shift, 153: # :gname => fields.shift, 154: # :devmajor => fields.shift.oct, 155: # :devminor => fields.shift.oct, 156: # :prefix => fields.shift, 157: 158: # :empty => empty 159: end
Creates a new TarHeader using vals
# File lib/rubygems/package/tar_header.rb, line 164 164: def initialize(vals) 165: unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode] then 166: raise ArgumentError, ":name, :size, :prefix and :mode required" 167: end 168: 169: vals[:uid] ||= 0 170: vals[:gid] ||= 0 171: vals[:mtime] ||= 0 172: vals[:checksum] ||= "" 173: vals[:typeflag] ||= "0" 174: vals[:magic] ||= "ustar" 175: vals[:version] ||= "00" 176: vals[:uname] ||= "wheel" 177: vals[:gname] ||= "wheel" 178: vals[:devmajor] ||= 0 179: vals[:devminor] ||= 0 180: 181: FIELDS.each do |name| 182: instance_variable_set "@#{name}", vals[name] 183: end 184: 185: @empty = vals[:empty] 186: end