rubyzip/lib/zip/extra_field/zip64.rb

31 lines
945 B
Ruby
Raw Normal View History

2013-08-27 04:26:14 +08:00
module Zip
# Info-ZIP Extra for Zip64 size
class ExtraField::Zip64 < ExtraField::Generic
attr_accessor :original_size, :compressed_size, :relative_header_offset, :disk_start_number
HEADER_ID = "\001\000"
register_map
def initialize(binstr = nil)
@original_size = nil
@compressed_size = nil
@relative_header_offset = nil
@disk_start_number = nil
binstr and merge(binstr)
end
def merge(binstr)
return if binstr.empty?
id, size, @original_size, @compressed_size, @relative_header_offset, @disk_start_number = binstr.to_s.unpack("vvQQQV")
end
def pack_for_local
return '' unless @original_size && @compressed_sie && @relative_header_offset && @disk_start_number
[1, 16, @original_size, @compressed_size, @relative_header_offset, @disk_start_number].pack("vvQQQV")
end
def pack_for_c_dir
pack_for_local
end
end
end