@@ -378,70 +378,6 @@ extension EXT4.EXT4Reader {
378378 return ResolvedPath ( inodeNum: current, inode: finalInode)
379379 }
380380
381- /// Walk a sequence of path components from a starting inode with parent tracking.
382- /// Returns the final inode and updated parent stack.
383- private func walkWithParents(
384- current start: EXT4 . InodeNumber ,
385- components: [ String ] ,
386- parentStack initialStack: [ EXT4 . InodeNumber ]
387- ) throws -> ( EXT4 . InodeNumber , [ EXT4 . InodeNumber ] ) {
388- var current = start
389- var parentStack = initialStack
390-
391- if components. isEmpty { return ( current, parentStack) }
392-
393- for name in components {
394- if name == " . " {
395- continue
396- }
397-
398- if name == " .. " {
399- // Handle parent directory traversal with proper tracking
400- if current == EXT4 . RootInode {
401- // At root, ".." points to itself (POSIX behavior)
402- continue
403- }
404-
405- // Use parent stack if available for accurate traversal
406- if !parentStack. isEmpty {
407- current = parentStack. removeLast ( )
408- } else {
409- // No parent tracking available - look up ".." entry in filesystem
410- // This happens when we start traversal from a non-root inode
411- let entries = try children ( of: current)
412- if let parent = entries. first ( where: { $0. 0 == " .. " } ) ? . 1 {
413- current = parent
414- }
415- }
416- continue
417- }
418-
419- // Regular component: verify current is a directory before traversing
420- let currentInode = try getInode ( number: current)
421- guard currentInode. mode. isDir ( ) else {
422- throw EXT4 . PathIOError. notADirectory ( name)
423- }
424-
425- // Look up child in current directory
426- let entries = try children ( of: current)
427- guard let child = entries. first ( where: { $0. 0 == name } ) else {
428- throw EXT4 . PathIOError. notFound ( name)
429- }
430-
431- // Push current to parent stack before descending
432- parentStack. append ( current)
433- current = child. 1
434- }
435-
436- return ( current, parentStack)
437- }
438-
439- /// Walk a sequence of path components from a starting inode.
440- private func walk( current start: EXT4 . InodeNumber , components: [ String ] ) throws -> EXT4 . InodeNumber {
441- let ( result, _) = try walkWithParents ( current: start, components: components, parentStack: [ ] )
442- return result
443- }
444-
445381 /// Normalize a path into components, handling absolute and relative paths.
446382 private func normalize( path: FilePath ) -> [ String ] {
447383 let s = path. description
0 commit comments