diff options
author | Himbeer <himbeer@disroot.org> | 2024-07-04 14:57:57 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-07-04 14:57:57 +0200 |
commit | 4e4024841ce20c6bfdcc3e40abd62cb40f8eb002 (patch) | |
tree | 1e0b6160499a61680ed4a0294e33cf27f522eb1a | |
parent | 7578d21e8456eb08513fd04d2dc29ce2decfe833 (diff) |
vfs: Use C ABI for callbacks
Fixes #40.
-rw-r--r-- | src/lib/vfs.zig | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/lib/vfs.zig b/src/lib/vfs.zig index 22cba72..dc5194c 100644 --- a/src/lib/vfs.zig +++ b/src/lib/vfs.zig @@ -26,8 +26,8 @@ pub const Stream = struct { readFn: ?ReadFn, writeFn: ?WriteFn, - pub const ReadFn = *const fn (buffer: []u8) sysexchange.Result(usize); - pub const WriteFn = *const fn (bytes: []const u8) sysexchange.Result(usize); + pub const ReadFn = *const fn (ptr: [*]u8, len: usize) callconv(.C) sysexchange.Result(usize); + pub const WriteFn = *const fn (ptr: [*]const u8, len: usize) callconv(.C) sysexchange.Result(usize); }; // A file is a resource that creates a unique data stream with a driver. @@ -37,10 +37,10 @@ pub const File = struct { writeFn: ?WriteFn, closeFn: ?CloseFn, - pub const OpenFn = *allowzero const fn (pid: u16) sysexchange.Result(*anyopaque); - pub const ReadFn = *const fn (context: *anyopaque, buffer: []u8) sysexchange.Result(usize); - pub const WriteFn = *const fn (context: *anyopaque, bytes: []const u8) sysexchange.Result(usize); - pub const CloseFn = *const fn (context: *anyopaque) void; + pub const OpenFn = *allowzero const fn (pid: u16) callconv(.C) sysexchange.Result(*anyopaque); + pub const ReadFn = *const fn (context: *anyopaque, ptr: [*]u8, len: usize) callconv(.C) sysexchange.Result(usize); + pub const WriteFn = *const fn (context: *anyopaque, ptr: [*]const u8, len: usize) callconv(.C) sysexchange.Result(usize); + pub const CloseFn = *const fn (context: *anyopaque) callconv(.C) void; }; // A hook is a resource that invokes raw driver callbacks when interacted with. @@ -62,8 +62,8 @@ pub const DirHook = struct { removeFn: RemoveFn, pub const ProvideFn = *allowzero const fn (inode: Inode) sysexchange.Result(void); - pub const FindFn = *allowzero const fn (name: []const u8) ?Inode; - pub const RemoveFn = *allowzero const fn (name: []const u8) sysexchange.Result(void); + pub const FindFn = *allowzero const fn (name: [*:0]const u8) ?Inode; + pub const RemoveFn = *allowzero const fn (name: [*:0]const u8) sysexchange.Result(void); }; pub const Resource = union(enum) { @@ -137,7 +137,7 @@ pub const ResourceDescriptor = struct { .stream => |stream| { const readFn = stream.readFn orelse return Error.ReadNotSupported; proc.state = .suspended; - try call(self.inode.pid, readFn, .{buffer}, .{ + try call(self.inode.pid, readFn, .{ buffer.ptr, buffer.len }, .{ .hookFn = crossProcessReturn, .context = proc, }); @@ -152,7 +152,7 @@ pub const ResourceDescriptor = struct { .stream => |stream| { const writeFn = stream.writeFn orelse return Error.WriteNotSupported; proc.state = .suspended; - try call(self.inode.pid, writeFn, .{bytes}, .{ + try call(self.inode.pid, writeFn, .{ bytes.ptr, bytes.len }, .{ .hookFn = crossProcessReturn, .context = proc, }); |