Class: Archive::Ar::Format::BSD

Inherits:
Object
  • Object
show all
Defined in:
lib/archive/ar/format/bsd.rb

Class Method Summary collapse

Class Method Details

.build_header(file) ⇒ Object



39
40
41
42
# File 'lib/archive/ar/format/bsd.rb', line 39

def build_header(file)
  header = read_file_header(file)
  header_to_s(header)
end

.extract_file(dest_dir, header, data, options = {}) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/archive/ar/format/bsd.rb', line 12

def extract_file(dest_dir, header, data, options = {})
  file = File.join(dest_dir, header[:name])

  File.open(file, "w") do |f|
    f.write(data)
  end

  File.chmod(header[:mode], file)
  #FileUtils.chown(header[:owner], header[:group], file)

  true
end

.read_global_header(io) ⇒ Object



6
7
8
9
10
# File 'lib/archive/ar/format/bsd.rb', line 6

def read_global_header(io)
  io.read(8).tap do |global_header|
    raise "Invalid header" unless global_header == Archive::Ar::MAGIC
  end
end

.read_header(io) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/archive/ar/format/bsd.rb', line 25

def read_header(io)
  block = io.read(60)
  header = parse_header(block)
  header.merge! :start => io.tell

  if header[:name].start_with? "#1/"
    long_size = header[:name][3..-1].to_i
    header[:start] += long_size
    header[:name] = io.read(long_size).strip
  end

  header
end