Class: Zip::ExtraField::Zip64
- Defined in:
- lib/zip/extra_field/zip64.rb
Overview
Info-ZIP Extra for Zip64 size
Constant Summary collapse
- HEADER_ID =
['0100'].pack('H*')
Instance Attribute Summary collapse
-
#compressed_size ⇒ Object
Returns the value of attribute compressed_size.
-
#disk_start_number ⇒ Object
Returns the value of attribute disk_start_number.
-
#original_size ⇒ Object
Returns the value of attribute original_size.
-
#relative_header_offset ⇒ Object
Returns the value of attribute relative_header_offset.
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#initialize(binstr = nil) ⇒ Zip64
constructor
A new instance of Zip64.
- #merge(binstr) ⇒ Object
- #pack_for_c_dir ⇒ Object
- #pack_for_local ⇒ Object
-
#parse(original_size, compressed_size, relative_header_offset = nil, disk_start_number = nil) ⇒ Object
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).
Methods inherited from Generic
#initial_parse, name, register_map, #to_c_dir_bin, #to_local_bin
Constructor Details
#initialize(binstr = nil) ⇒ Zip64
Returns a new instance of Zip64.
8 9 10 11 12 13 14 15 16 17 |
# File 'lib/zip/extra_field/zip64.rb', line 8 def initialize(binstr = nil) @content = 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 @original_size = nil @compressed_size = nil @relative_header_offset = nil @disk_start_number = nil binstr and merge(binstr) end |
Instance Attribute Details
#compressed_size ⇒ Object
Returns the value of attribute compressed_size.
4 5 6 |
# File 'lib/zip/extra_field/zip64.rb', line 4 def compressed_size @compressed_size end |
#disk_start_number ⇒ Object
Returns the value of attribute disk_start_number.
4 5 6 |
# File 'lib/zip/extra_field/zip64.rb', line 4 def disk_start_number @disk_start_number end |
#original_size ⇒ Object
Returns the value of attribute original_size.
4 5 6 |
# File 'lib/zip/extra_field/zip64.rb', line 4 def original_size @original_size end |
#relative_header_offset ⇒ Object
Returns the value of attribute relative_header_offset.
4 5 6 |
# File 'lib/zip/extra_field/zip64.rb', line 4 def relative_header_offset @relative_header_offset end |
Instance Method Details
#==(other) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/zip/extra_field/zip64.rb', line 19 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 |
#merge(binstr) ⇒ Object
26 27 28 29 |
# File 'lib/zip/extra_field/zip64.rb', line 26 def merge(binstr) return if binstr.empty? _, @content = initial_parse(binstr) end |
#pack_for_c_dir ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/zip/extra_field/zip64.rb', line 57 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 |
#pack_for_local ⇒ Object
51 52 53 54 55 |
# File 'lib/zip/extra_field/zip64.rb', line 51 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 |
#parse(original_size, compressed_size, relative_header_offset = nil, disk_start_number = nil) ⇒ Object
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)
34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/zip/extra_field/zip64.rb', line 34 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 |