def dump_central_file_record(io)
bytes_written = 0
need_trailing_data_descriptor = false
begin
io.pos
rescue Errno::ESPIPE
need_trailing_data_descriptor = true
end
if encryption_codec.class == Codec::TraditionalEncryption then
need_trailing_data_descriptor = true
end
general_purpose_flags = compression_codec.general_purpose_flags
general_purpose_flags |= encryption_codec.general_purpose_flags
if need_trailing_data_descriptor then
general_purpose_flags |= FLAG_DATA_DESCRIPTOR_FOLLOWS
end
version_needed_to_extract = compression_codec.version_needed_to_extract
if encryption_codec.version_needed_to_extract > version_needed_to_extract then
version_needed_to_extract = encryption_codec.version_needed_to_extract
end
bytes_written += io.write(CFH_SIGNATURE)
bytes_written += io.write(
[
version_made_by,
version_needed_to_extract,
general_purpose_flags,
compression_codec.compression_method,
mtime.to_dos_time.to_i
].pack('vvvvV')
)
bytes_written += @data_descriptor.dump(io)
extra_field_data = central_extra_field_data
bytes_written += io.write(
[
zip_path.length,
extra_field_data.length,
comment.length,
0,
internal_file_attributes,
external_file_attributes,
@local_file_record_position
].pack('vvvvvVV')
)
bytes_written += io.write(zip_path)
bytes_written += io.write(extra_field_data)
bytes_written += io.write(comment)
bytes_written
end