Finished? inodes

This commit is contained in:
Caleb Gardner
2025-05-16 11:02:59 -05:00
parent ff2ef6feaa
commit 43295fb823
5 changed files with 198 additions and 4 deletions
+35 -2
View File
@@ -56,8 +56,41 @@ pub const InodeHeader = packed struct {
};
pub const Inode = struct {
alloc: std.mem.Allocator,
header: InodeHeader,
data: InodeData, //TODO
data: InodeData,
pub fn init(rdr: io.AnyReader) !Inode {}
pub fn init(alloc: std.mem.Allocator, rdr: io.AnyReader, block_size: u32) !Inode {
const hdr = try rdr.readStruct(InodeHeader);
const data: InodeData = switch (hdr.inode_type) {
.dir => .{ .dir = try .init(rdr) },
.file => .{ .file = try .init(alloc, rdr, block_size) },
.sym => .{ .sym = try .init(alloc, rdr) },
.block => .{ .block = try .init(rdr) },
.char => .{ .char = try .init(rdr) },
.fifo => .{ .fifo = try .init(rdr) },
.sock => .{ .sock = try .init(rdr) },
.ext_dir => .{ .ext_dir = try .init(rdr) },
.ext_file => .{ .ext_file = try .init(alloc, rdr, block_size) },
.ext_sym => .{ .ext_sym = try .init(alloc, rdr) },
.ext_block => .{ .ext_block = try .init(rdr) },
.ext_char => .{ .ext_char = try .init(rdr) },
.ext_fifo => .{ .ext_fifo = try .init(rdr) },
.ext_sock => .{ .ext_sock = try .init(rdr) },
};
return .{
.alloc = alloc,
.header = hdr,
.data = data,
};
}
pub fn deinit(self: Inode) void {
switch (self.data) {
.file => |d| d.deinit(self.alloc),
.sym => |d| d.deinit(self.alloc),
.ext_file => |d| d.deinit(self.alloc),
.ext_sym => |d| d.deinit(self.alloc),
else => {},
}
}
};