From ff2ef6feaa71dd9aefbb8a37e59c8995f724180a Mon Sep 17 00:00:00 2001 From: Caleb Gardner Date: Fri, 16 May 2025 06:59:21 -0500 Subject: [PATCH] INODES! --- src/inode/dir.zig | 34 ++++++++++++++++++++++++++++++++++ src/inode/file.zig | 0 src/inode/inode.zig | 29 ++++++++++++++++++++++++++++- src/inode/misc.zig | 0 src/inode/sym.zig | 0 5 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 src/inode/dir.zig create mode 100644 src/inode/file.zig create mode 100644 src/inode/misc.zig create mode 100644 src/inode/sym.zig diff --git a/src/inode/dir.zig b/src/inode/dir.zig new file mode 100644 index 0000000..1b4ba2f --- /dev/null +++ b/src/inode/dir.zig @@ -0,0 +1,34 @@ +const io = @import("std").io; + +pub const DirInode = packed struct { + block_start: u32, + hard_links: u32, + /// Note: size is 3 larger then the actual size, due to "." and ".." + size: u16, + offset: u16, + parent_num: u32, + + pub fn init(rdr: io.AnyReader) !DirInode { + return rdr.readStruct(DirInode); + } +}; + +const DirIndex = struct { + +} + +pub const ExtDirInode = packed struct { + hard_links: u32, + /// Note: size is 3 larger then the actual size, due to "." and ".." + size: u32, + block_start: u32, + parent_num: u32, + index_count: u16, + offset: u16, + xattr_inx: u32, + // TODO: possibly also read dir indexes. Maybe relagate to function... + + pub fn init(rdr: io.AnyReader) !ExtDirInode { + return rdr.readStruct(ExtDirInode); + } +}; diff --git a/src/inode/file.zig b/src/inode/file.zig new file mode 100644 index 0000000..e69de29 diff --git a/src/inode/inode.zig b/src/inode/inode.zig index 0cc04d0..b1c5a0b 100644 --- a/src/inode/inode.zig +++ b/src/inode/inode.zig @@ -1,3 +1,6 @@ +const std = @import("std"); +const io = std.io; + pub const InodeRef = packed struct { offset: u16, block_start: u32, @@ -21,6 +24,28 @@ pub const InodeType = enum(u16) { ext_sock, }; +const dir = @import("dir.zig"); +const file = @import("file.zig"); +const sym = @import("sym.zig"); +const misc = @import("misc.zig"); + +pub const InodeData = union(enum) { + dir: dir.DirInode, + file: file.FileInode, + sym: sym.SymInode, + block: misc.DeviceInode, + char: misc.DeviceInode, + fifo: misc.IPCInode, + sock: misc.IPCInode, + ext_dir: dir.ExtDirInode, + ext_file: file.ExtFileInode, + ext_sym: sym.ExtSymInode, + ext_block: misc.ExtDeviceInode, + ext_char: misc.ExtDeviceInode, + ext_fifo: misc.ExtIPCInode, + ext_sock: misc.ExtIPCInode, +}; + pub const InodeHeader = packed struct { inode_type: InodeType, perm: u16, @@ -32,5 +57,7 @@ pub const InodeHeader = packed struct { pub const Inode = struct { header: InodeHeader, - data: void, //TODO + data: InodeData, //TODO + + pub fn init(rdr: io.AnyReader) !Inode {} }; diff --git a/src/inode/misc.zig b/src/inode/misc.zig new file mode 100644 index 0000000..e69de29 diff --git a/src/inode/sym.zig b/src/inode/sym.zig new file mode 100644 index 0000000..e69de29