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 18 |
# 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 |
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
20 21 22 23 24 25 |
# 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 |
#merge(binstr) ⇒ Object
27 28 29 30 |
# File 'lib/zip/extra_field/zip64.rb', line 27 def merge(binstr) return if binstr.empty? _, @content = initial_parse(binstr) end |
#pack_for_c_dir ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/zip/extra_field/zip64.rb', line 58 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
52 53 54 55 56 |
# File 'lib/zip/extra_field/zip64.rb', line 52 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)
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/zip/extra_field/zip64.rb', line 35 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 |