summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig20
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());
+}