Fix DataReader

Don't use DataExtractor when set to only use 1 thread
This commit is contained in:
Caleb Gardner
2025-05-28 21:17:04 -05:00
parent 4af3e0373e
commit 10304139e4
2 changed files with 7 additions and 8 deletions
+2 -1
View File
@@ -60,6 +60,7 @@ pub const File = struct {
pub fn deinit(self: *File, alloc: std.mem.Allocator) void {
self.inode.deinit();
alloc.free(self.name);
if (self.data_rdr != null) self.data_rdr.?.deinit();
if (self.dirEntries != null) {
var iter = self.dirEntries.?.iterator();
while (iter.next()) |ent| {
@@ -268,7 +269,7 @@ pub const File = struct {
return err;
};
defer fil.close();
if (self.size() > rdr.super.block_size) {
if (config.thread_count > 1 and self.size() > rdr.super.block_size) {
var ext = try self.extractor(rdr);
defer ext.deinit();
ext.writeToFile(pool, &fil) catch |err| {
+5 -7
View File
@@ -96,17 +96,15 @@ pub const DataReader = struct {
}
fn readNextBlock(self: *DataReader) !void {
if (self.next_block_num == self.sizes.len) {
if (self.cur_bloc.len > 0) self.alloc.free(self.cur_bloc);
return DataReaderError.EOF;
}
const siz = self.sizes[self.next_block_num];
self.next_block_num += 1;
defer self.next_block_num += 1;
if (self.next_block_num == self.sizes.len and self.frag_data != null) {
try self.sizeBlock(self.frag_data.?.len);
@memcpy(self.cur_bloc, self.frag_data.?);
return;
} else if (self.next_block_num >= self.sizes.len) {
return DataReaderError.EOF;
}
const siz = self.sizes[self.next_block_num];
if (siz.size == 0) {
if (self.next_block_num == self.sizes.len) {
try self.sizeBlock(@truncate(self.file_size % self.block_size));
@@ -145,7 +143,7 @@ pub const DataReader = struct {
};
}
to_read = @min(bytes.len - cur_read, self.cur_bloc.len - self.cur_offset);
@memcpy(bytes[cur_read..], self.cur_bloc[self.cur_offset .. @as(usize, self.cur_offset) + to_read]);
@memcpy(bytes[cur_read .. cur_read + to_read], self.cur_bloc[self.cur_offset .. @as(usize, self.cur_offset) + to_read]);
self.cur_offset += @truncate(to_read);
cur_read += to_read;
}