Finished? inodes
This commit is contained in:
+35
-2
@@ -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 => {},
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user