From 4b41fcd9a3cfea5485c1669d0e01c726817bc3e3 Mon Sep 17 00:00:00 2001 From: David Yu Date: Fri, 3 Apr 2026 18:17:37 -0500 Subject: [PATCH] Add deep extent tree support (depth >= 2) in EXT4 reader --- .../ContainerizationEXT4/EXT4+Reader.swift | 60 +++++++++---------- .../TestEXT4Reader+IO.swift | 32 ++++++++++ 2 files changed, 62 insertions(+), 30 deletions(-) diff --git a/Sources/ContainerizationEXT4/EXT4+Reader.swift b/Sources/ContainerizationEXT4/EXT4+Reader.swift index d4a32dbc..bce5b425 100644 --- a/Sources/ContainerizationEXT4/EXT4+Reader.swift +++ b/Sources/ContainerizationEXT4/EXT4+Reader.swift @@ -192,61 +192,61 @@ extension EXT4 { func getExtents(inode: InodeNumber) throws -> [(start: UInt32, end: UInt32)]? { let inode = try self.getInode(number: inode) let inodeBlock = Data(tupleToArray(inode.block)) - var offset = 0 - var extents: [(start: UInt32, end: UInt32)] = [] let extentHeaderSize = MemoryLayout.size - let extentIndexSize = MemoryLayout.size - let extentLeafSize = MemoryLayout.size - // read extent header - let header = inodeBlock.subdata(in: offset.. 0), follows each + /// index entry to a child block and recurses. + private func readExtentNode( + data: Data, + header: ExtentHeader, + into extents: inout [(start: UInt32, end: UInt32)] + ) throws { + let extentHeaderSize = MemoryLayout.size + let extentIndexSize = MemoryLayout.size + let extentLeafSize = MemoryLayout.size + var offset = extentHeaderSize + + if header.depth == 0 { + // Leaf node: entries are ExtentLeaf mappings for _ in 0..