Class: Cabriolet::CABOffsetCalculator

Inherits:
OffsetCalculator show all
Defined in:
lib/cabriolet/offset_calculator.rb

Overview

CAB-specific offset calculator

Calculates offsets for CFHEADER, CFFOLDER entries, CFFILE entries, and CFDATA blocks in Microsoft Cabinet files.

Instance Method Summary collapse

Instance Method Details

#calculate(structure) ⇒ Hash

Calculate CAB file offsets

Parameters:

  • structure (Hash)

    Must contain :folders and :files

Returns:

  • (Hash)

    Offset information



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/cabriolet/offset_calculator.rb', line 57

def calculate(structure)
  offset = Constants::CFHEADER_SIZE

  # Folders section
  folders_offset = offset
  offset += Constants::CFFOLDER_SIZE * structure[:folders].size

  # Files section
  files_offset = offset
  structure[:files].each do |file_info|
    offset += Constants::CFFILE_SIZE
    offset += file_info[:name].bytesize + 1 # null-terminated
  end

  # Data blocks section
  data_offset = offset

  {
    folders: folders_offset,
    files: files_offset,
    data: data_offset,
  }
end