Messing around with thing.

Things not working.
This commit is contained in:
Caleb Gardner
2025-05-16 15:16:46 -05:00
parent 43295fb823
commit bbf3539dcf
9 changed files with 124 additions and 30 deletions
+4 -3
View File
@@ -7,7 +7,7 @@ pub const FileHolder = struct {
offset: u64,
pub fn init(path: []const u8, offset: u64) !FileHolder {
const fil = try fs.cwd().openFile(path, .{});
const fil = try fs.cwd().openFile(path, .{ .mode = .read_write });
return .{
.file = fil,
.offset = offset,
@@ -17,7 +17,7 @@ pub const FileHolder = struct {
self.file.close();
}
pub fn anyAt(self: FileHolder, offset: u64) io.AnyReader {
pub fn anyAt(self: *FileHolder, offset: u64) io.AnyReader {
var offsetRdr = FileOffsetReader{
.file = self.file,
.offset = self.offset + offset,
@@ -31,7 +31,8 @@ const FileOffsetReader = struct {
offset: u64,
fn read(self: *FileOffsetReader, bytes: []u8) !usize {
const red = try self.file.pread(bytes, self.offset);
std.debug.print("yo {}\n", .{self.file.open()});
const red = try self.file.preadAll(bytes, self.offset);
self.offset += red;
return red;
}
+14 -3
View File
@@ -30,6 +30,17 @@ pub const MetadataReader = struct {
self.alloc.free(self.block);
}
pub fn skip(self: *MetadataReader, offset: u16) !void {
var cur_skip: u32 = 0;
var to_skip: u32 = 0;
while (cur_skip < offset) {
if (self.offset >= self.block.len) try self.readNextBlock();
to_skip = @min(offset - cur_skip, self.block.len - self.offset);
cur_skip += to_skip;
self.offset += to_skip;
}
}
fn readNextBlock(self: *MetadataReader) !void {
self.offset = 0;
if (self.block.len > 0) self.alloc.free(self.block);
@@ -38,9 +49,9 @@ pub const MetadataReader = struct {
self.block = try self.alloc.alloc(u8, hdr.size);
_ = try self.reader.readAll(self.block);
} else {
const limit = std.io.limitedReader(self.reader, hdr.size);
const dat = try self.decomp.decompress(self.alloc, limit.reader().any());
self.block = dat.toOwnedSlice();
var limit = std.io.limitedReader(self.reader, hdr.size);
var dat = try self.decomp.decompress(self.alloc, limit.reader().any());
self.block = try dat.toOwnedSlice();
}
}