aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/process.zig8
-rw-r--r--src/lib/vfs.zig14
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,
});
},