From 5521b2ce6a80160d68c76319cbe55469b73b8e30 Mon Sep 17 00:00:00 2001 From: Caleb Gardner Date: Sun, 3 May 2026 05:31:04 -0500 Subject: [PATCH] Started working on file extraction --- src/file.zig | 1 + src/frag.zig | 7 +++++++ src/util/data_reader.zig | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 src/frag.zig create mode 100644 src/util/data_reader.zig diff --git a/src/file.zig b/src/file.zig index 1dda0a1..b54dd87 100644 --- a/src/file.zig +++ b/src/file.zig @@ -7,6 +7,7 @@ const Archive = @import("archive.zig"); const DirEntry = @import("directory.zig"); const ExtractionOptions = @import("options.zig"); const Inode = @import("inode.zig"); +const DataExtractor = @import("util/data_extractor.zig"); const MetadataReader = @import("util/metadata.zig"); const File = @This(); diff --git a/src/frag.zig b/src/frag.zig new file mode 100644 index 0000000..9333f24 --- /dev/null +++ b/src/frag.zig @@ -0,0 +1,7 @@ +const BlockSize = @import("inode_data/file.zig").BlockSize; + +pub const FragEntry = extern struct { + start: u64, + size: BlockSize, + _: u32, +}; diff --git a/src/util/data_reader.zig b/src/util/data_reader.zig new file mode 100644 index 0000000..15831f8 --- /dev/null +++ b/src/util/data_reader.zig @@ -0,0 +1,20 @@ +//! DataReader reads a regular file's data linearly from start to finish using Io.Reader interface. + +const std = @import("std"); +const Io = std.Io; + +const BlockSize = @import("../inode_data/file.zig").BlockSize; +const Decompressor = @import("decompressor.zig"); +const OffsetFile = @import("offset_file.zig"); + +const DataExtractor = @This(); + +fil: OffsetFile, +decomp: *const Decompressor, +block_size: u32, + +file_size: u64, +cur_offset: u64, +blocks: []BlockSize, + +interface: Io.Reader,