diff options
Diffstat (limited to 'src/main.zig')
-rw-r--r-- | src/main.zig | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/main.zig b/src/main.zig index 20c939a..417f10b 100644 --- a/src/main.zig +++ b/src/main.zig @@ -111,6 +111,9 @@ const ZipFile = struct { fn file_name(self: ZipFile, index: u16) []const u8 { return self.central_directory_headers[index].file_name; } + fn file_comment(self: ZipFile, index: u16) []const u8 { + return self.central_directory_headers[index].file_comment; + } fn extract(self: ZipFile, index: u16, stream_or_file_in: anytype, stream_or_file_out: anytype) !void { const cdh = self.central_directory_headers[index]; try stream_or_file_in.seekTo(cdh.relative_offset_of_local_header); @@ -170,7 +173,7 @@ const CentralDirectoryHeader = struct { version_made_by: u16, version_needed_to_extract: u16, general_purpose_bit_flag: u16, - compression_method: u16, + compression_method: ZipFile.CompressionMethod, last_mod_file_time: u16, last_mod_file_date: u16, crc32: u32, @@ -330,7 +333,7 @@ test "foo2" { try std.testing.expectEqualStrings(zf.file_name(1), "foo.txt"); } -test "extract" { +test "extract stored" { const test_zip = @embedFile("hello.zip"); var fbs = std.io.fixedBufferStream(test_zip); var zf = try ZipFile.from(std.testing.allocator, &fbs); @@ -343,3 +346,16 @@ test "extract" { try zf.extract(1, &fbs, &fbs_out); try std.testing.expectEqualStrings("hi there\n", fbs_out.getWritten()); } + +test "extract deflate" { + const test_zip = @embedFile("deflate.zip"); + var fbs = std.io.fixedBufferStream(test_zip); + var zf = try ZipFile.from(std.testing.allocator, &fbs); + defer zf.deinit(); + var out = [_]u8{0} ** 1024; + var fbs_out = std.io.fixedBufferStream(&out); + try std.testing.expectEqualStrings("Here is a comment :)", zf.file_comment(0)); + try std.testing.expectEqual(ZipFile.CompressionMethod.deflate, zf.central_directory_headers[0].compression_method); + try zf.extract(0, &fbs, &fbs_out); + try std.testing.expectEqualStrings(@embedFile("foo.txt"), fbs_out.getWritten()); +} |