started working on compresison

This commit is contained in:
Andre Henriques 2023-05-22 22:04:16 +01:00
parent 0ea7d8b7ee
commit 1bb0de9d0e

View File

@ -35,6 +35,7 @@ const ZipFileHeader = struct {
file_name: []u8, file_name: []u8,
extra_field: []u8, extra_field: []u8,
compressed_content: []u8,
allocator: std.mem.Allocator, allocator: std.mem.Allocator,
@ -47,25 +48,28 @@ const ZipFileHeader = struct {
var self = Self{ var self = Self{
.allocator = allocator, .allocator = allocator,
.version = try reader.readInt(u16, .Big), .version = try reader.readInt(u16, .Little),
.general = try reader.readInt(u16, .Big), .general = try reader.readInt(u16, .Little),
.compression_method = try reader.readInt(u16, .Big), .compression_method = try reader.readInt(u16, .Little),
.last_mod_time = try reader.readInt(u16, .Big), .last_mod_time = try reader.readInt(u16, .Little),
.last_mod_date = try reader.readInt(u16, .Big), .last_mod_date = try reader.readInt(u16, .Little),
.crc_32 = try reader.readInt(u32, .Big), .crc_32 = try reader.readInt(u32, .Little),
.compressed_size = try reader.readInt(u32, .Big), .compressed_size = try reader.readInt(u32, .Little),
.uncompressed_size = try reader.readInt(u32, .Big), .uncompressed_size = try reader.readInt(u32, .Little),
.file_name_length = try reader.readInt(u16, .Big), .file_name_length = try reader.readInt(u16, .Little),
.extra_field_length = try reader.readInt(u16, .Big), .extra_field_length = try reader.readInt(u16, .Little),
.file_name = undefined, .file_name = undefined,
.extra_field = undefined, .extra_field = undefined,
.compressed_content = undefined,
}; };
self.file_name = try allocator.alloc(u8, self.file_name_length); self.file_name = try allocator.alloc(u8, self.file_name_length);
self.extra_field = try allocator.alloc(u8, self.extra_field_length); self.extra_field = try allocator.alloc(u8, self.extra_field_length);
self.compressed_content = try allocator.alloc(u8, self.compressed_size);
_ = try reader.read(self.file_name); _ = try reader.read(self.file_name);
_ = try reader.read(self.extra_field); _ = try reader.read(self.extra_field);
_ = try reader.read(self.compressed_content);
return self; return self;
} }
@ -73,6 +77,7 @@ const ZipFileHeader = struct {
fn deinit(self: *Self) void { fn deinit(self: *Self) void {
self.allocator.free(self.file_name); self.allocator.free(self.file_name);
self.allocator.free(self.extra_field); self.allocator.free(self.extra_field);
self.allocator.free(self.compressed_content);
} }
}; };
@ -122,7 +127,20 @@ pub fn main() !void {
var first_file = try ZipFileHeader.init(allocator, reader); var first_file = try ZipFileHeader.init(allocator, reader);
defer first_file.deinit(); defer first_file.deinit();
print("G: {}", .{first_file.file_name_length}); if (!std.mem.eql(u8, first_file.file_name, "mimetype")) {
print("T: {s}", .{first_file.file_name}); exit("Invalid file provided", .{}, 1);
print("O: {s}", .{first_file.extra_field}); }
if (!std.mem.startsWith(u8, first_file.compressed_content, "application/epub")) {
exit("Invalid file provided", .{}, 1);
}
print("H: {}", .{first_file.compression_method});
var second_file = try ZipFileHeader.init(allocator, reader);
defer second_file.deinit();
print("G: {s}", .{second_file.file_name});
print("GI: {}", .{second_file.compression_method});
print("xml stuff:\n{s}", .{second_file.compressed_content});
} }