diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/syscall.zig | 10 | ||||
-rw-r--r-- | src/lib/vfs.zig | 4 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 3c01879..3d60776 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -23,7 +23,7 @@ pub fn handler(proc: *process.Info, trap_frame: *trap.Frame) !void { 100003 => provideStream(proc, trap_frame), 100004 => provideFile(proc, trap_frame), 100005 => provideHook(proc, trap_frame), - 100006 => mkdir(trap_frame), + 100006 => mkdir(proc, trap_frame), 100007 => provideDirHook(proc, trap_frame), 100008 => remove(trap_frame), 100009 => read(proc, trap_frame), @@ -137,11 +137,11 @@ fn provideHook(proc: *const process.Info, trap_frame: *trap.Frame) void { // mkdir( // path_c: [*:0]const u8, // fixme: Kernel panic if null pointer // ) Result(void) -fn mkdir(trap_frame: *trap.Frame) void { +fn mkdir(proc: *const process.Info, trap_frame: *trap.Frame) void { const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); - - _ = path_c; - unreachable; + sysexchange.frameReturn(null, trap_frame, vfs.provideResourceZ(path_c, .{ + .dir = vfs.Tree.init(vfs.treeRoot().allocator), + }, proc.id)); } // provideDirHook( diff --git a/src/lib/vfs.zig b/src/lib/vfs.zig index b6646bf..af3b05c 100644 --- a/src/lib/vfs.zig +++ b/src/lib/vfs.zig @@ -12,6 +12,10 @@ const mem = std.mem; var root: Node = .{ .data = .{ .name = "", .resource = .{ .dir = undefined }, .pid = 0 } }; +pub fn treeRoot() *const Tree { + return &root.data.resource.dir; +} + pub const Error = error{ NotFound, RelativePathNotAllowed, |