aboutsummaryrefslogtreecommitdiff
path: root/src/lib/syscall.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r--src/lib/syscall.zig13
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);
}