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..