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.zig14
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