Futher tweaks & fixes
This commit is contained in:
+18
-14
@@ -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
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user