def record_header_redundant_additional(header, cursor)
lengths, nulls, externs = [], [], []
field_offsets = record_header_redundant_field_end_offsets(header, cursor)
this_field_offset = 0
field_offsets.each do |n|
case header[:offset_size]
when 1
next_field_offset = (n & RECORD_REDUNDANT_OFF1_OFFSET_MASK)
lengths << (next_field_offset - this_field_offset)
nulls << ((n & RECORD_REDUNDANT_OFF1_NULL_MASK) != 0)
externs << false
when 2
next_field_offset = (n & RECORD_REDUNDANT_OFF2_OFFSET_MASK)
lengths << (next_field_offset - this_field_offset)
nulls << ((n & RECORD_REDUNDANT_OFF2_NULL_MASK) != 0)
externs << ((n & RECORD_REDUNDANT_OFF2_EXTERN_MASK) != 0)
end
this_field_offset = next_field_offset
end
if record_format
header[:lengths], header[:nulls], header[:externs] = {}, [], []
record_fields.each do |f|
header[:lengths][f.name] = lengths[f.position]
header[:nulls] << f.name if nulls[f.position]
header[:externs] << f.name if externs[f.position]
end
else
header[:lengths], header[:nulls], header[:externs] = lengths, nulls, externs
end
end