Fix DataReader
Don't use DataExtractor when set to only use 1 thread
This commit is contained in:
+2
-1
@@ -60,6 +60,7 @@ pub const File = struct {
|
|||||||
pub fn deinit(self: *File, alloc: std.mem.Allocator) void {
|
pub fn deinit(self: *File, alloc: std.mem.Allocator) void {
|
||||||
self.inode.deinit();
|
self.inode.deinit();
|
||||||
alloc.free(self.name);
|
alloc.free(self.name);
|
||||||
|
if (self.data_rdr != null) self.data_rdr.?.deinit();
|
||||||
if (self.dirEntries != null) {
|
if (self.dirEntries != null) {
|
||||||
var iter = self.dirEntries.?.iterator();
|
var iter = self.dirEntries.?.iterator();
|
||||||
while (iter.next()) |ent| {
|
while (iter.next()) |ent| {
|
||||||
@@ -268,7 +269,7 @@ pub const File = struct {
|
|||||||
return err;
|
return err;
|
||||||
};
|
};
|
||||||
defer fil.close();
|
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);
|
var ext = try self.extractor(rdr);
|
||||||
defer ext.deinit();
|
defer ext.deinit();
|
||||||
ext.writeToFile(pool, &fil) catch |err| {
|
ext.writeToFile(pool, &fil) catch |err| {
|
||||||
|
|||||||
@@ -96,17 +96,15 @@ pub const DataReader = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn readNextBlock(self: *DataReader) !void {
|
fn readNextBlock(self: *DataReader) !void {
|
||||||
if (self.next_block_num == self.sizes.len) {
|
defer self.next_block_num += 1;
|
||||||
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;
|
|
||||||
if (self.next_block_num == self.sizes.len and self.frag_data != null) {
|
if (self.next_block_num == self.sizes.len and self.frag_data != null) {
|
||||||
try self.sizeBlock(self.frag_data.?.len);
|
try self.sizeBlock(self.frag_data.?.len);
|
||||||
@memcpy(self.cur_bloc, self.frag_data.?);
|
@memcpy(self.cur_bloc, self.frag_data.?);
|
||||||
return;
|
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 (siz.size == 0) {
|
||||||
if (self.next_block_num == self.sizes.len) {
|
if (self.next_block_num == self.sizes.len) {
|
||||||
try self.sizeBlock(@truncate(self.file_size % self.block_size));
|
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);
|
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);
|
self.cur_offset += @truncate(to_read);
|
||||||
cur_read += to_read;
|
cur_read += to_read;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user