From 10304139e4a07aae616974a497608a8b575aed9c Mon Sep 17 00:00:00 2001 From: Caleb Gardner Date: Wed, 28 May 2025 21:17:04 -0500 Subject: [PATCH] Fix DataReader Don't use DataExtractor when set to only use 1 thread --- src/file.zig | 3 ++- src/readers/data_reader.zig | 12 +++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/file.zig b/src/file.zig index 8ed24c3..deace51 100644 --- a/src/file.zig +++ b/src/file.zig @@ -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| { diff --git a/src/readers/data_reader.zig b/src/readers/data_reader.zig index 5264f16..5f9e1d4 100644 --- a/src/readers/data_reader.zig +++ b/src/readers/data_reader.zig @@ -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; }