Almost kind of working

This commit is contained in:
Caleb Gardner
2025-05-14 01:59:19 -05:00
parent a866804853
commit 3684a958a0
9 changed files with 135 additions and 66 deletions
+16 -16
View File
@@ -17,18 +17,18 @@ pub const DirIndex = struct {
dir_header_offset: u32,
dir_table_offset: u32,
name_size: u32,
name: []const u8,
name: []u8,
};
fn readDirIndex(rdr: io.AnyReader, alloc: std.heap.Allocator) !DirIndex {
const out = DirIndex{
fn readDirIndex(rdr: io.AnyReader, alloc: std.mem.Allocator) !DirIndex {
var out = DirIndex{
.dir_header_offset = try rdr.readInt(u32, std.builtin.Endian.little),
.dir_table_offset = try rdr.readInt(u32, std.builtin.Endian.little),
.name_size = try rdr.readInt(u32, std.builtin.Endian.little),
.name = undefined,
};
out.name = try alloc.alloc(u8, out.name_size);
try rdr.read(out.name);
_ = try rdr.readAll(out.name);
return out;
}
@@ -40,23 +40,23 @@ pub const ExtDirInode = struct {
dir_index_count: u16,
dir_block_offset: u16,
xattr_index: u32,
indexes: []const DirIndex,
indexes: []DirIndex,
};
pub fn readExtDirInode(rdr: io.AnyReader, alloc: std.heap.Allocator) !ExtDirInode {
const out = ExtDirInode{
.hard_links = rdr.readInt(u32, std.builtin.Endian.little),
.dir_table_size = rdr.readInt(u32, std.builtin.Endian.little),
.dir_block_start = rdr.readInt(u32, std.builtin.Endian.little),
.parent_inode_num = rdr.readInt(u32, std.builtin.Endian.little),
.dir_index_count = rdr.readInt(u16, std.builtin.Endian.little),
.dir_block_offset = rdr.readInt(u16, std.builtin.Endian.little),
.xattr_index = rdr.readInt(u32, std.builtin.Endian.little),
pub fn readExtDirInode(rdr: io.AnyReader, alloc: std.mem.Allocator) !ExtDirInode {
var out = ExtDirInode{
.hard_links = try rdr.readInt(u32, std.builtin.Endian.little),
.dir_table_size = try rdr.readInt(u32, std.builtin.Endian.little),
.dir_block_start = try rdr.readInt(u32, std.builtin.Endian.little),
.parent_inode_num = try rdr.readInt(u32, std.builtin.Endian.little),
.dir_index_count = try rdr.readInt(u16, std.builtin.Endian.little),
.dir_block_offset = try rdr.readInt(u16, std.builtin.Endian.little),
.xattr_index = try rdr.readInt(u32, std.builtin.Endian.little),
.indexes = undefined,
};
const tmp = std.ArrayList(DirIndex).init(alloc);
var tmp = std.ArrayList(DirIndex).init(alloc);
try tmp.resize(out.dir_index_count);
const i: u16 = 0;
var i: u16 = 0;
while (i < out.dir_index_count) : (i += 1) {
tmp.items[i] = try readDirIndex(rdr, alloc);
}
+6 -6
View File
@@ -8,8 +8,8 @@ pub const FileInode = struct {
block_sizes: []const u32,
};
pub fn readFileInode(rdr: std.io.AnyReader, block_size: u32, alloc: std.heap.Allocator) !FileInode {
const out = FileInode{
pub fn readFileInode(rdr: std.io.AnyReader, block_size: u32, alloc: std.mem.Allocator) !FileInode {
var out = FileInode{
.start = try rdr.readInt(u32, std.builtin.Endian.little),
.frag_index = try rdr.readInt(u32, std.builtin.Endian.little),
.frag_block_offset = try rdr.readInt(u32, std.builtin.Endian.little),
@@ -21,7 +21,7 @@ pub fn readFileInode(rdr: std.io.AnyReader, block_size: u32, alloc: std.heap.All
block_num += 1;
}
out.block_sizes = try alloc.alloc(u32, block_num);
try rdr.read(std.mem.asBytes(&out.block_sizes));
_ = try rdr.readAll(std.mem.asBytes(&out.block_sizes));
return out;
}
@@ -36,8 +36,8 @@ pub const ExtFileInode = struct {
block_sizes: []const u32,
};
pub fn readExtFileInode(rdr: std.io.AnyReader, block_size: u32, alloc: std.heap.Allocator) !ExtFileInode {
const out = ExtFileInode{
pub fn readExtFileInode(rdr: std.io.AnyReader, block_size: u32, alloc: std.mem.Allocator) !ExtFileInode {
var out = ExtFileInode{
.start = try rdr.readInt(u64, std.builtin.Endian.little),
.size = try rdr.readInt(u64, std.builtin.Endian.little),
.sparse = try rdr.readInt(u64, std.builtin.Endian.little),
@@ -52,6 +52,6 @@ pub fn readExtFileInode(rdr: std.io.AnyReader, block_size: u32, alloc: std.heap.
block_num += 1;
}
out.block_sizes = try alloc.alloc(u32, block_num);
try rdr.read(std.mem.asBytes(&out.block_sizes));
_ = try rdr.readAll(std.mem.asBytes(&out.block_sizes));
return out;
}
+8 -8
View File
@@ -4,36 +4,36 @@ const io = std.io;
pub const SymlinkInode = struct {
hard_links: u32,
target_size: u32,
path: []const u8,
path: []u8,
};
pub fn readSymlinkInode(rdr: io.AnyReader, alloc: std.heap.Allocator) !SymlinkInode {
const out = SymlinkInode{
pub fn readSymlinkInode(rdr: io.AnyReader, alloc: std.mem.Allocator) !SymlinkInode {
var out = SymlinkInode{
.hard_links = try rdr.readInt(u32, std.builtin.Endian.little),
.target_size = try rdr.readInt(u32, std.builtin.Endian.little),
.path = undefined,
};
out.path = try alloc.alloc(u8, out.target_size + 1);
try rdr.read(out.path);
_ = try rdr.readAll(out.path);
return out;
}
pub const ExtSymlinkInode = struct {
hard_links: u32,
target_size: u32,
path: []const u8,
path: []u8,
xattr_index: u32,
};
pub fn readExtSymlinkInode(rdr: io.AnyReader, alloc: std.heap.Allocator) !SymlinkInode {
const out = ExtSymlinkInode{
pub fn readExtSymlinkInode(rdr: io.AnyReader, alloc: std.mem.Allocator) !ExtSymlinkInode {
var out = ExtSymlinkInode{
.hard_links = try rdr.readInt(u32, std.builtin.Endian.little),
.target_size = try rdr.readInt(u32, std.builtin.Endian.little),
.path = undefined,
.xattr_index = undefined,
};
out.path = try alloc.alloc(u8, out.target_size + 1);
try rdr.read(out.path);
_ = try rdr.readAll(out.path);
out.xattr_index = try rdr.readInt(u32, std.builtin.Endian.little);
return out;
}