aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-07-24 15:10:22 +0200
committerHimbeer <himbeer@disroot.org>2024-07-24 15:10:22 +0200
commit496bca916712624265a8e3b86c4d77f860565fbd (patch)
tree04d41ca1c0e30e37e895361c146907dfbdb45616 /src
parente97d83b5973482f1eabf2b884ef23177760be01f (diff)
vfs: Require listing implementation for DirHooks
Diffstat (limited to 'src')
-rw-r--r--src/lib/syscall.zig5
-rw-r--r--src/lib/vfs.zig2
2 files changed, 6 insertions, 1 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig
index 7c70bd6..d2aaca3 100644
--- a/src/lib/syscall.zig
+++ b/src/lib/syscall.zig
@@ -180,6 +180,7 @@ fn mkdir(proc: *const process.Info, trap_frame: *trap.Frame) void {
// options: *const vfs.Options, // fixme: Kernel panic if null pointer
// provideFn: vfs.DirHook.ProvideFn,
// findFn: vfs.DirHook.FindFn,
+// listFn:vfs.DirHook.ListFn,
// removeFn: vfs.DirHook.RemoveFn,
// ) Result(void)
fn provideDirHook(proc: *const process.Info, trap_frame: *trap.Frame) void {
@@ -190,13 +191,15 @@ fn provideDirHook(proc: *const process.Info, trap_frame: *trap.Frame) void {
const options: *const vfs.Options = @ptrFromInt(trap_frame.general_purpose_registers[11]);
const provideFn: vfs.DirHook.ProvideFn = @ptrFromInt(trap_frame.general_purpose_registers[12]);
const findFn: vfs.DirHook.FindFn = @ptrFromInt(trap_frame.general_purpose_registers[13]);
- const removeFn: vfs.DirHook.RemoveFn = @ptrFromInt(trap_frame.general_purpose_registers[14]);
+ const listFn: vfs.DirHook.ListFn = @ptrFromInt(trap_frame.general_purpose_registers[14]);
+ const removeFn: vfs.DirHook.RemoveFn = @ptrFromInt(trap_frame.general_purpose_registers[15]);
sysexchange.frameReturn(null, trap_frame, vfs.provideResourceZ(path_c, .{
.tag = .dir_hook,
.data = .{ .dir_hook = .{
.provideFn = provideFn,
.findFn = findFn,
+ .listFn = listFn,
.removeFn = removeFn,
} },
}, proc.id, options.*));
diff --git a/src/lib/vfs.zig b/src/lib/vfs.zig
index eb70d56..16a793c 100644
--- a/src/lib/vfs.zig
+++ b/src/lib/vfs.zig
@@ -82,10 +82,12 @@ pub const Hook = extern struct {
pub const DirHook = extern struct {
provideFn: ProvideFn,
findFn: FindFn,
+ listFn: ListFn,
removeFn: RemoveFn,
pub const ProvideFn = *allowzero const fn (name_ptr: [*]const u8, name_len: usize, inode: Inode) callconv(.C) sysexchange.Result(void);
pub const FindFn = *allowzero const fn (name_ptr: [*]const u8, name_len: usize) callconv(.C) ?*Inode;
+ pub const ListFn = *allowzero const fn (inodes_ptr: [*]Inode, inodes_len: usize) callconv(.C) sysexchange.Result(usize);
pub const RemoveFn = *allowzero const fn (name_ptr: [*]const u8, name_len: usize) callconv(.C) sysexchange.Result(void);
};