Object
Implements the POSIX tar header as a Ruby class. The structure of the POSIX tar header is:
struct tarfile_entry_posix { // pack/unpack char name[100]; // ASCII (+ Z unless filled) a100/Z100 char mode[8]; // 0 padded, octal, null a8 /A8 char uid[8]; // ditto a8 /A8 char gid[8]; // ditto a8 /A8 char size[12]; // 0 padded, octal, null a12 /A12 char mtime[12]; // 0 padded, octal, null a12 /A12 char checksum[8]; // 0 padded, octal, null, space a8 /A8 char typeflag[1]; // see below a /a char linkname[100]; // ASCII + (Z unless filled) a100/Z100 char magic[6]; // "ustar\0" a6 /A6 char version[2]; // "00" a2 /A2 char uname[32]; // ASCIIZ a32 /Z32 char gname[32]; // ASCIIZ a32 /Z32 char devmajor[8]; // 0 padded, octal, null a8 /A8 char devminor[8]; // 0 padded, octal, null a8 /A8 char prefix[155]; // ASCII (+ Z unless filled) a155/Z155 };
The typeflag may be one of the following known values:
"0" |
Regular file. NULL should be treated as a synonym, for compatibility purposes. |
"1" |
Hard link. |
"2" |
Symbolic link. |
"3" |
Character device node. |
"4" |
Block device node. |
"5" |
Directory. |
"6" |
FIFO node. |
"7" |
Reserved. |
POSIX indicates that "A POSIX-compliant implementation must treat any unrecognized typeflag value as a regular file."
Creates a new PosixHeader. A PosixHeader cannot be created unless the name, size, prefix, and mode are provided.
# File lib/archive/tar/minitar.rb, line 97 def initialize(vals) unless vals[:name] && vals[:size] && vals[:prefix] && vals[:mode] raise ArgumentError end vals[:mtime] ||= 0 vals[:checksum] ||= "" vals[:typeflag] ||= "0" vals[:magic] ||= "ustar" vals[:version] ||= "00" FIELDS.each do |field| instance_variable_set("@#{field}", vals[field.intern]) end @empty = vals[:empty] end
Creates a new PosixHeader from a data stream.
# File lib/archive/tar/minitar.rb, line 66 def self.new_from_stream(stream) data = stream.read(512) fields = data.unpack(HEADER_UNPACK_FORMAT) name = fields.shift mode = fields.shift.oct uid = fields.shift.oct gid = fields.shift.oct size = fields.shift.oct mtime = fields.shift.oct checksum = fields.shift.oct typeflag = fields.shift linkname = fields.shift magic = fields.shift version = fields.shift.oct uname = fields.shift gname = fields.shift devmajor = fields.shift.oct devminor = fields.shift.oct prefix = fields.shift empty = (data == "\00"" * 512) new(:name => name, :mode => mode, :uid => uid, :gid => gid, :size => size, :mtime => mtime, :checksum => checksum, :typeflag => typeflag, :magic => magic, :version => version, :uname => uname, :gname => gname, :devmajor => devmajor, :devminor => devminor, :prefix => prefix, :empty => empty) end
Generated with the Darkfish Rdoc Generator 2.