class Zip::ExtraField::Zip64
Info-ZIP Extra for Zip64
size
Constants
- HEADER_ID
Attributes
Public Class Methods
Source
# File lib/zip/extra_field/zip64.rb, line 8 def initialize(binstr = nil) # unparsed binary; we don't actually know what this contains # without looking for FFs in the associated file header # call parse after initializing with a binary string @content = nil @original_size = nil @compressed_size = nil @relative_header_offset = nil @disk_start_number = nil binstr && merge(binstr) end
Public Instance Methods
Source
# File lib/zip/extra_field/zip64.rb, line 20 def ==(other) other.original_size == @original_size && other.compressed_size == @compressed_size && other.relative_header_offset == @relative_header_offset && other.disk_start_number == @disk_start_number end
Source
# File lib/zip/extra_field/zip64.rb, line 27 def merge(binstr) return if binstr.empty? _, @content = initial_parse(binstr) end
Source
# File lib/zip/extra_field/zip64.rb, line 60 def pack_for_c_dir # central directory entries contain only fields that didn't fit in the main entry part packed = ''.force_encoding('BINARY') packed << [@original_size].pack('Q<') if @original_size packed << [@compressed_size].pack('Q<') if @compressed_size packed << [@relative_header_offset].pack('Q<') if @relative_header_offset packed << [@disk_start_number].pack('V') if @disk_start_number packed end
Source
# File lib/zip/extra_field/zip64.rb, line 53 def pack_for_local # local header entries must contain original size and compressed size; other fields do not apply return '' unless @original_size && @compressed_size [@original_size, @compressed_size].pack('Q<Q<') end
Source
# File lib/zip/extra_field/zip64.rb, line 36 def parse(original_size, compressed_size, relative_header_offset = nil, disk_start_number = nil) @original_size = extract(8, 'Q<') if original_size == 0xFFFFFFFF @compressed_size = extract(8, 'Q<') if compressed_size == 0xFFFFFFFF @relative_header_offset = extract(8, 'Q<') if relative_header_offset && relative_header_offset == 0xFFFFFFFF @disk_start_number = extract(4, 'V') if disk_start_number && disk_start_number == 0xFFFF @content = nil [@original_size || original_size, @compressed_size || compressed_size, @relative_header_offset || relative_header_offset, @disk_start_number || disk_start_number] end
pass the values from the base entry (if applicable) wider values are only present in the extra field for base values set to all FFs returns the final values for the four attributes (from the base or zip64 extra record)
Private Instance Methods
Source
# File lib/zip/extra_field/zip64.rb, line 48 def extract(size, format) @content.slice!(0, size).unpack1(format) end