aboutsummaryrefslogtreecommitdiff
path: root/src/lib/vfs.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/vfs.zig')
-rw-r--r--src/lib/vfs.zig14
1 files changed, 12 insertions, 2 deletions
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,
});
},