started working on compresison
This commit is contained in:
parent
0ea7d8b7ee
commit
1bb0de9d0e
44
src/main.zig
44
src/main.zig
@ -35,6 +35,7 @@ const ZipFileHeader = struct {
|
||||
|
||||
file_name: []u8,
|
||||
extra_field: []u8,
|
||||
compressed_content: []u8,
|
||||
|
||||
allocator: std.mem.Allocator,
|
||||
|
||||
@ -47,25 +48,28 @@ const ZipFileHeader = struct {
|
||||
|
||||
var self = Self{
|
||||
.allocator = allocator,
|
||||
.version = try reader.readInt(u16, .Big),
|
||||
.general = try reader.readInt(u16, .Big),
|
||||
.compression_method = try reader.readInt(u16, .Big),
|
||||
.last_mod_time = try reader.readInt(u16, .Big),
|
||||
.last_mod_date = try reader.readInt(u16, .Big),
|
||||
.crc_32 = try reader.readInt(u32, .Big),
|
||||
.compressed_size = try reader.readInt(u32, .Big),
|
||||
.uncompressed_size = try reader.readInt(u32, .Big),
|
||||
.file_name_length = try reader.readInt(u16, .Big),
|
||||
.extra_field_length = try reader.readInt(u16, .Big),
|
||||
.version = try reader.readInt(u16, .Little),
|
||||
.general = try reader.readInt(u16, .Little),
|
||||
.compression_method = try reader.readInt(u16, .Little),
|
||||
.last_mod_time = try reader.readInt(u16, .Little),
|
||||
.last_mod_date = try reader.readInt(u16, .Little),
|
||||
.crc_32 = try reader.readInt(u32, .Little),
|
||||
.compressed_size = try reader.readInt(u32, .Little),
|
||||
.uncompressed_size = try reader.readInt(u32, .Little),
|
||||
.file_name_length = try reader.readInt(u16, .Little),
|
||||
.extra_field_length = try reader.readInt(u16, .Little),
|
||||
.file_name = undefined,
|
||||
.extra_field = undefined,
|
||||
.compressed_content = undefined,
|
||||
};
|
||||
|
||||
self.file_name = try allocator.alloc(u8, self.file_name_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.extra_field);
|
||||
_ = try reader.read(self.compressed_content);
|
||||
|
||||
return self;
|
||||
}
|
||||
@ -73,6 +77,7 @@ const ZipFileHeader = struct {
|
||||
fn deinit(self: *Self) void {
|
||||
self.allocator.free(self.file_name);
|
||||
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);
|
||||
defer first_file.deinit();
|
||||
|
||||
print("G: {}", .{first_file.file_name_length});
|
||||
print("T: {s}", .{first_file.file_name});
|
||||
print("O: {s}", .{first_file.extra_field});
|
||||
if (!std.mem.eql(u8, first_file.file_name, "mimetype")) {
|
||||
exit("Invalid file provided", .{}, 1);
|
||||
}
|
||||
|
||||
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});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user