66: def self.new_from_stream(stream, long_name = nil)
67: data = stream.read(512)
68: fields = data.unpack(HEADER_UNPACK_FORMAT)
69: name = fields.shift
70: mode = fields.shift.oct
71: uid = fields.shift.oct
72: gid = fields.shift.oct
73: size = fields.shift.oct
74: mtime = fields.shift.oct
75: checksum = fields.shift.oct
76: typeflag = fields.shift
77: linkname = fields.shift
78: magic = fields.shift
79: version = fields.shift.oct
80: uname = fields.shift
81: gname = fields.shift
82: devmajor = fields.shift.oct
83: devminor = fields.shift.oct
84: prefix = fields.shift
85:
86: empty = (data == "\0" * 512)
87:
88: if typeflag == 'L' && name == '././@LongLink'
89: long_name = stream.read(512).rstrip
90: return new_from_stream(stream, long_name)
91: end
92:
93: new(:name => long_name || name,
94: :mode => mode, :uid => uid, :gid => gid,
95: :size => size, :mtime => mtime, :checksum => checksum,
96: :typeflag => typeflag, :magic => magic, :version => version,
97: :uname => uname, :gname => gname, :devmajor => devmajor,
98: :devminor => devminor, :prefix => prefix, :empty => empty)
99: end