Futher tweaks & fixes

This commit is contained in:
Caleb J. Gardner
2025-08-08 06:34:31 -05:00
parent b50f28026f
commit 1eceb8d899
2 changed files with 24 additions and 19 deletions
+18 -14
View File
@@ -64,21 +64,25 @@ pub fn File(comptime T: type) type {
}, },
.file => |f| { .file => |f| {
out.data_reader = try .init(rdr, inode); out.data_reader = try .init(rdr, inode);
if (f.hasFragment()) { _ = f;
try out.data_reader.?.addFragment( //TODO: fragments
try rdr.frag_table.get(f.frag_idx), // if (f.hasFragment()) {
f.frag_offset, // try out.data_reader.?.addFragment(
); // try rdr.frag_table.get(f.frag_idx),
} // f.frag_offset,
// );
// }
}, },
.ext_file => |f| { .ext_file => |f| {
out.data_reader = try .init(rdr, inode); out.data_reader = try .init(rdr, inode);
if (f.hasFragment()) { _ = f;
try out.data_reader.?.addFragment( //TODO: Fragments
try rdr.frag_table.get(f.frag_idx), // if (f.hasFragment()) {
f.frag_offset, // try out.data_reader.?.addFragment(
); // try rdr.frag_table.get(f.frag_idx),
} // f.frag_offset,
// );
// }
}, },
else => {}, else => {},
} }
@@ -274,7 +278,7 @@ pub fn File(comptime T: type) type {
continue; continue;
}; };
var thr = std.Thread.spawn(.{ .allocator = self.rdr.alloc }, extractReal, .{ var thr = std.Thread.spawn(.{ .allocator = self.rdr.alloc }, extractReal, .{
fil, &fil,
op, op,
ext_path, ext_path,
errs, errs,
@@ -451,7 +455,7 @@ pub fn File(comptime T: type) type {
}; };
} }
fn extractRegFinish( fn extractRegFinish(
self: Self, self: *Self,
op: ExtractionOptions, op: ExtractionOptions,
path: []const u8, path: []const u8,
fil_errs: *std.ArrayList(anyerror), fil_errs: *std.ArrayList(anyerror),
+6 -5
View File
@@ -61,7 +61,7 @@ const DecompCompletion = struct {
return self.errs.items.len > 0; return self.errs.items.len > 0;
} }
fn condWait(self: *DecompCompletion) void { fn condWait(self: *DecompCompletion) void {
self.cond.wait(self.mut); self.cond.wait(&self.mut);
} }
}; };
@@ -148,7 +148,7 @@ pub fn DataReader(comptime T: type) type {
pub fn writeToNoBlock(self: *Self, wrt: anytype, comptime finish: anytype, finish_args: anytype) !void { pub fn writeToNoBlock(self: *Self, wrt: anytype, comptime finish: anytype, finish_args: anytype) !void {
comptime std.debug.assert(std.meta.hasFn(@TypeOf(wrt), "write") or std.meta.hasFn(@TypeOf(wrt), "pwrite")); comptime std.debug.assert(std.meta.hasFn(@TypeOf(wrt), "write") or std.meta.hasFn(@TypeOf(wrt), "pwrite"));
errdefer self.completions.clear(); errdefer self.completion.clear();
var write_thr = try std.Thread.spawn( var write_thr = try std.Thread.spawn(
.{ .allocator = self.alloc }, .{ .allocator = self.alloc },
writeThread, writeThread,
@@ -161,7 +161,8 @@ pub fn DataReader(comptime T: type) type {
decompThread, decompThread,
.{ self, i }, .{ self, i },
) catch |err| { ) catch |err| {
self.completion.addErr(err) catch {}; self.completion.addErr(err);
continue;
}; };
thr.detach(); thr.detach();
} }
@@ -184,11 +185,11 @@ pub fn DataReader(comptime T: type) type {
}); });
if (idx == self.sizes.len and self.frag != null) { if (idx == self.sizes.len and self.frag != null) {
@memcpy(block, self.frag.?); @memcpy(block, self.frag.?);
return; return block;
} }
if (size.uncompressed) { if (size.uncompressed) {
_ = try self.rdr.pread(block, self.offsets[idx]); _ = try self.rdr.pread(block, self.offsets[idx]);
return; return block;
} }
_ = try self.comp.decompress( _ = try self.comp.decompress(
1024 * 1024, 1024 * 1024,