diff options
Diffstat (limited to 'src/lib/syscall.zig')
-rw-r--r-- | src/lib/syscall.zig | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/lib/syscall.zig b/src/lib/syscall.zig index 5cbc9f2..c124373 100644 --- a/src/lib/syscall.zig +++ b/src/lib/syscall.zig @@ -57,12 +57,20 @@ fn open(proc: *process.Info, trap_frame: *trap.Frame) void { const path_c: [*:0]const u8 = @ptrFromInt(trap_frame.general_purpose_registers[10]); const data = trap_frame.general_purpose_registers[11]; - const rd = vfs.openZ(proc, path_c, proc.id, data) catch |err| { + const result = vfs.openZ(proc, path_c, data) catch |err| { sysexchange.frameReturn(usize, trap_frame, err); return; }; - const maybe_handle = proc.createRdHandle(rd); - sysexchange.frameReturn(null, trap_frame, maybe_handle); + + switch (result) { + .rd => |rd| { + const maybe_handle = proc.createRdHandle(rd); + sysexchange.frameReturn(usize, trap_frame, maybe_handle); + }, + .data => |result_data| { + sysexchange.frameReturn(null, trap_frame, result_data); + }, + } } // close(handle: usize) void |