aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/resources.zig10
-rw-r--r--src/lib/vfs.zig4
2 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/resources.zig b/src/lib/resources.zig
index e02e96c..4a2ae7b 100644
--- a/src/lib/resources.zig
+++ b/src/lib/resources.zig
@@ -348,21 +348,21 @@ fn addDir(path: []const u8) !void {
});
}
-fn open(context: *vfs.FileContext) !void {
+fn open(context: *vfs.FileContext, initializer: ?*anyopaque) !void {
const allocator = vfs.treeRoot().allocator;
- const inner = context.inner orelse return Error.NoTarFileInitializer;
- const old_context: *FileContext = @alignCast(@ptrCast(inner));
+ const init_to = initializer orelse return Error.NoTarFileInitializer;
+ const init_context: *FileContext = @alignCast(@ptrCast(init_to));
const new_context = try allocator.create(FileContext);
- new_context.* = old_context.*;
+ new_context.* = init_context.*;
context.inner = new_context;
}
fn read(context: *vfs.FileContext, ptr: [*]u8, len: usize) callconv(.C) Result(usize) {
if (context.inner == null) {
- open(context) catch |err| {
+ open(context, context.initializer) catch |err| {
return Result(usize).fromAnyTypeOrError(err);
};
}
diff --git a/src/lib/vfs.zig b/src/lib/vfs.zig
index 951c666..47d631a 100644
--- a/src/lib/vfs.zig
+++ b/src/lib/vfs.zig
@@ -91,6 +91,7 @@ pub const DirHook = extern struct {
pub const FileContext = extern struct {
inner: ?*anyopaque,
+ initializer: ?*anyopaque,
};
pub const ResourceKind = enum(u32) {
@@ -185,7 +186,8 @@ pub const ResourceDescriptor = struct {
if (inode.resource.tag == .file) {
const context = try allocator.create(FileContext);
- context.inner = inode.resource.data.file.initializer;
+ context.inner = null;
+ context.initializer = inode.resource.data.file.initializer;
return .{
.inode = inode,