File openning

Start on data extraction
This commit is contained in:
Caleb Gardner
2026-05-03 04:40:49 -05:00
parent a3f7b86e67
commit cbd2697c19
3 changed files with 96 additions and 12 deletions
+28
View File
@@ -2,10 +2,15 @@
const std = @import("std");
const Reader = std.Io.Reader;
const Io = std.Io;
const DirEntry = @import("directory.zig");
const dir = @import("inode_data/dir.zig");
const file = @import("inode_data/file.zig");
const misc = @import("inode_data/misc.zig");
const Decompressor = @import("util/decompressor.zig");
const MetadataReader = @import("util/metadata.zig");
const OffsetFile = @import("util/offset_file.zig");
const Inode = @This();
@@ -45,8 +50,31 @@ pub fn deinit(self: Inode, alloc: std.mem.Allocator) void {
}
}
// Utility Functions
pub fn readDirectory(self: Inode, alloc: std.mem.Allocator, io: Io, fil: OffsetFile, decomp: *const Decompressor, dir_offset: u64) ![]DirEntry {
return switch (self.data) {
.dir => |d| readDirFromData(alloc, io, fil, decomp, dir_offset, d),
.ext_dir => |d| readDirFromData(alloc, io, fil, decomp, dir_offset, d),
else => Error.NotDirectory,
};
}
fn readDirFromData(alloc: std.mem.Allocator, io: Io, fil: OffsetFile, decomp: *const Decompressor, dir_offset: u64, d: anytype) ![]DirEntry {
var rdr = try fil.readerAt(io, dir_offset + d.block_start, &[0]u8{});
var meta: MetadataReader = .init(alloc, &rdr.interface, decomp);
try meta.interface.discardAll(d.block_offset);
return DirEntry.readDirectory(alloc, &meta.interface, d.size);
}
// Types
pub const Error = error{
NotDirectory,
NotRegularFile,
NotExtended,
};
pub const Ref = packed struct(u64) {
block_offset: u16,
block_start: u32,