Module: DooDah::CentralDirectoryHeader

Includes:
ZipEntryHeader
Included in:
ZipEntry, ZipOutputStream
Defined in:
lib/doo_dah/zip_header.rb

Constant Summary

Constants included from ZipEntryHeader

ZipEntryHeader::CENTRAL_ENTRY_HEADER_SIGNATURE, ZipEntryHeader::DEFLATED, ZipEntryHeader::END_CENTRAL_DIRECTORY_SIGNATURE, ZipEntryHeader::GP_FLAGS_CRC_UNKNOWN, ZipEntryHeader::GP_FLAGS_UTF8, ZipEntryHeader::LOCAL_ENTRY_FOOTER_SIGNATURE, ZipEntryHeader::LOCAL_ENTRY_HEADER_SIGNATURE, ZipEntryHeader::LOCAL_ENTRY_STATIC_HEADER_LENGTH, ZipEntryHeader::LOCAL_ENTRY_TRAILING_DESCRIPTOR_LENGTH, ZipEntryHeader::STORED, ZipEntryHeader::VERSION_NEEDED_TO_EXTRACT

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ZipEntryHeader

common_header_size, name_size, #write_common_header, #write_infozip_utf8_name, #write_name

Methods included from ZipHeader

signature_size, #write_signature

Class Method Details

.central_header_size(name) ⇒ Object



115
116
117
# File 'lib/doo_dah/zip_header.rb', line 115

def self.central_header_size(name)
  ZipHeader.signature_size + version_made_by_size + ZipEntryHeader.common_header_size + 6 + 8 + ZipEntryHeader.name_size(name) 
end

.end_of_central_directory_sizeObject



119
120
121
# File 'lib/doo_dah/zip_header.rb', line 119

def self.end_of_central_directory_size
  ZipHeader.signature_size + 10 + 8
end

.version_made_by_sizeObject



123
124
125
# File 'lib/doo_dah/zip_header.rb', line 123

def self.version_made_by_size
  2
end

Instance Method Details

#write_central_headerObject



127
128
129
130
131
132
133
134
135
136
137
138
139
# File 'lib/doo_dah/zip_header.rb', line 127

def write_central_header
  write_signature(CENTRAL_ENTRY_HEADER_SIGNATURE)
  write_version_made_by
  write_common_header
  write([
    0,                         # file comment length
    0,                         # start of file disk number
    0,                         # internal attributes = binary
    (010 << 12 | 0644) << 16,  # external attributes = file, rw-r--r--
    local_header_offset
  ].pack('vvvVV'))
  write_name
end

#write_end_of_central_directoryObject



141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/doo_dah/zip_header.rb', line 141

def write_end_of_central_directory
  central_directory_size = current_offset - central_directory_offset
  write_signature(END_CENTRAL_DIRECTORY_SIGNATURE)
  end_of_central_directory = [ 
    0,                               # disk number
    0,                               # disk with directory
    entry_count,                   # entries on this disk
    entry_count,                   # total entries
    central_directory_size,
    central_directory_offset,
    0                                # zip file comment length
  ].pack('vvvvVVv')
  write(end_of_central_directory)
end

#write_version_made_byObject



156
157
158
# File 'lib/doo_dah/zip_header.rb', line 156

def write_version_made_by
  write([10, 3].pack('CC'))         # version, file system type
end