readZip64FileExtents
Function parameters
Parameters
- T:type
- header:T
- extents:*FileExtents
- data:[]u8
Type definitions in this namespace
Types
Extract the zipped files to the given `dest` directory.
Functions
- extract
- Extract the zipped files to the given `dest` directory.
= [4]u8{ 'P', 'K', 1, 2 }
Values
- central_file_header_sig
- = [4]u8{ 'P', 'K', 1, 2 }
- local_file_header_sig
- = [4]u8{ 'P', 'K', 3, 4 }
- end_record_sig
- = [4]u8{ 'P', 'K', 5, 6 }
- end_record64_sig
- = [4]u8{ 'P', 'K', 6, 6 }
- end_locator64_sig
- = [4]u8{ 'P', 'K', 6, 7 }
Source
Implementation
fn readZip64FileExtents(comptime T: type, header: T, extents: *FileExtents, data: []u8) !void {
var data_offset: usize = 0;
if (isMaxInt(header.uncompressed_size)) {
if (data_offset + 8 > data.len)
return error.ZipBadCd64Size;
extents.uncompressed_size = std.mem.readInt(u64, data[data_offset..][0..8], .little);
data_offset += 8;
}
if (isMaxInt(header.compressed_size)) {
if (data_offset + 8 > data.len)
return error.ZipBadCd64Size;
extents.compressed_size = std.mem.readInt(u64, data[data_offset..][0..8], .little);
data_offset += 8;
}
switch (T) {
CentralDirectoryFileHeader => {
if (isMaxInt(header.local_file_header_offset)) {
if (data_offset + 8 > data.len)
return error.ZipBadCd64Size;
extents.local_file_header_offset = std.mem.readInt(u64, data[data_offset..][0..8], .little);
data_offset += 8;
}
if (isMaxInt(header.disk_number)) {
if (data_offset + 4 > data.len)
return error.ZipInvalid;
const disk_number = std.mem.readInt(u32, data[data_offset..][0..4], .little);
if (disk_number != 0)
return error.ZipMultiDiskUnsupported;
data_offset += 4;
}
if (data_offset > data.len)
return error.ZipBadCd64Size;
},
else => {},
}
}