class OdinFlex::AR
Constants
- AR_HEADER
- HEADER_LENGTH
- Info
Public Class Methods
is_ar?(io)
click to toggle source
# File lib/odinflex/ar.rb, line 15 def self.is_ar? io pos = io.pos header = io.read(AR_HEADER.length) header == AR_HEADER ensure io.seek pos, IO::SEEK_SET end
new(fd)
click to toggle source
# File lib/odinflex/ar.rb, line 23 def initialize fd @fd = fd @pos = fd.pos end
Public Instance Methods
each() { |info| ... }
click to toggle source
# File lib/odinflex/ar.rb, line 30 def each @fd.seek @pos, IO::SEEK_SET header = @fd.read(AR_HEADER.length) raise "Wrong Header" unless header == AR_HEADER loop do break if @fd.eof? identifier, timestamp, owner, group, mode, size, ending = @fd.read(HEADER_LENGTH).unpack('A16A12A6A6A8A10A2') raise "wrong ending #{ending}" unless ending.bytes == [0x60, 0x0A] pos = @fd.pos # Assume BSD for now fname_len = identifier[/\d+$/].to_i filename = @fd.read(fname_len).unpack1('A*') info = Info.new filename, timestamp, owner, group, mode, size.to_i - fname_len, @fd.pos yield info @fd.seek size.to_i + pos, IO::SEEK_SET end end