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,
|
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});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user