diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-10 14:45:54 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-10 14:45:54 +0200 |
commit | 538fb19cd3394cbcd89d0dc9af60540d8b3cb19e (patch) | |
tree | ecba5bb8737dcb693f81b30b16310acbccc1a67c /src/lib/syscall.zig | |
parent | ad198f401be990b30e7756daef33b58e3ad28868 (diff) |
syscall: Support removing resources from directory hooks
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r-- | src/lib/syscall.zig | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 5e9105b..3b7ed71 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -180,11 +180,14 @@ fn remove(trap_frame: *trap.Frame) void { if (vfs.find(dirname)) |node| { const basename = std.fs.path.basenamePosix(path); - sysexchange.frameReturn(null, trap_frame, switch (node.data.resource) { - .dir => |*dir| dir.remove(basename), - .dir_hook => Error.Unimplemented, - else => vfs.Error.NotADirectory, - }); + switch (node.data.resource) { + .dir => |*dir| sysexchange.frameReturn(null, trap_frame, dir.remove(basename)), + .dir_hook => |dir_hook| { + const result = dir_hook.removeFn(basename.ptr, basename.len); + sysexchange.frameReturnResult(void, trap_frame, result); + }, + else => sysexchange.frameReturn(void, trap_frame, vfs.Error.NotADirectory), + } } else { sysexchange.frameReturn(void, trap_frame, vfs.Error.NotFound); } |