diff options
-rw-r--r-- | src/lib/process.zig | 8 | ||||
-rw-r--r-- | src/lib/vfs.zig | 14 |
2 files changed, 18 insertions, 4 deletions
diff --git a/src/lib/process.zig b/src/lib/process.zig index 85d6522..6dec114 100644 --- a/src/lib/process.zig +++ b/src/lib/process.zig @@ -68,13 +68,17 @@ pub const Info = struct { rds: std.AutoArrayHashMap(usize, vfs.ResourceDescriptor), pub const CleanupHook = struct { - cleanupFn: *const fn (proc: *const Info, buffer: []u8, copy: []const u8) void, + pub const CleanupFn = *const fn (proc: *const Info, buffer: []u8, copy: []const u8) void; + + cleanupFn: CleanupFn, buffer: []u8, copy: []const u8, }; pub const TermHook = struct { - hookFn: *const fn (context: *anyopaque, proc: *const Info) void, + pub const HookFn = *const fn (context: *anyopaque, proc: *const Info) void; + + hookFn: HookFn, context: *anyopaque, }; diff --git a/src/lib/vfs.zig b/src/lib/vfs.zig index 46f01d6..2e3e844 100644 --- a/src/lib/vfs.zig +++ b/src/lib/vfs.zig @@ -10,6 +10,8 @@ const sysexchange = @import("sysexchange.zig"); const mem = std.mem; +const TermHook = process.Info.TermHook; + var root: Node = .{ .data = .{ .name = "", @@ -179,6 +181,10 @@ pub const ResourceDescriptor = struct { } pub fn read(self: ResourceDescriptor, proc: *process.Info, buffer: []u8) !usize { + return readHooked(self, proc, buffer, crossProcessReturn); + } + + pub fn readHooked(self: ResourceDescriptor, proc: *process.Info, buffer: []u8, hookFn: TermHook.HookFn) !usize { if (self.inode.flags.detached and self.inode.options.reclaimable) { return Error.Detached; } @@ -204,7 +210,7 @@ pub const ResourceDescriptor = struct { .buffer = buffer, .copy = copy, }, .{ - .hookFn = crossProcessReturn, + .hookFn = hookFn, .context = proc, }); }, @@ -214,6 +220,10 @@ pub const ResourceDescriptor = struct { } pub fn write(self: ResourceDescriptor, proc: *process.Info, bytes: []const u8) !usize { + return writeHooked(self, proc, bytes, crossProcessReturn); + } + + pub fn writeHooked(self: ResourceDescriptor, proc: *process.Info, bytes: []const u8, hookFn: TermHook.HookFn) !usize { if (self.inode.flags.detached and self.inode.options.reclaimable) { return Error.Detached; } @@ -235,7 +245,7 @@ pub const ResourceDescriptor = struct { proc.state = .suspended; try call(driver, writeFn, .{ copy.ptr, copy.len }, null, .{ - .hookFn = crossProcessReturn, + .hookFn = hookFn, .context = proc, }); }, |