diff options
Diffstat (limited to 'src/lib/vfs.zig')
-rw-r--r-- | src/lib/vfs.zig | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/lib/vfs.zig b/src/lib/vfs.zig index 7083c7c..951c666 100644 --- a/src/lib/vfs.zig +++ b/src/lib/vfs.zig @@ -61,16 +61,14 @@ pub const Stream = extern struct { // A file is a resource that creates a unique data stream with a driver. pub const File = extern struct { - openFn: OpenFn, readFn: ?ReadFn, writeFn: ?WriteFn, closeFn: ?CloseFn, initializer: ?*anyopaque, - pub const OpenFn = *allowzero const fn (initializer: ?*anyopaque, 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; + pub const ReadFn = *const fn (context: *FileContext, ptr: [*]u8, len: usize) callconv(.C) sysexchange.Result(usize); + pub const WriteFn = *const fn (context: *FileContext, ptr: [*]const u8, len: usize) callconv(.C) sysexchange.Result(usize); + pub const CloseFn = *const fn (context: *FileContext) callconv(.C) void; }; // A hook is a resource that invokes raw driver callbacks when interacted with. @@ -92,7 +90,7 @@ pub const DirHook = extern struct { }; pub const FileContext = extern struct { - inner: *allowzero anyopaque, + inner: ?*anyopaque, }; pub const ResourceKind = enum(u32) { @@ -185,10 +183,19 @@ pub const ResourceDescriptor = struct { pub fn init(allocator: Allocator, inode: *Inode) !ResourceDescriptor { inode.refs = std.math.add(usize, inode.refs, 1) catch return Error.TooManyReferences; - const context = if (inode.resource.tag == .file) try allocator.create(FileContext) else null; + if (inode.resource.tag == .file) { + const context = try allocator.create(FileContext); + context.inner = inode.resource.data.file.initializer; + + return .{ + .inode = inode, + .context = context, + }; + } + return .{ .inode = inode, - .context = context, + .context = null, }; } |