@@ -627,15 +627,17 @@ impl VfsNode for MemDirectory {
627627 block_on (
628628 async {
629629 let ( component, rest) = path. split_once ( "/" ) . unwrap_or ( ( path, "" ) ) ;
630+ let inner = self . inner . read ( ) . await ;
631+ let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
630632
631633 if !rest. is_empty ( ) {
632- let inner = self . inner . read ( ) . await ;
633- let directory = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
634- return directory. traverse_lstat ( rest) ;
634+ if node. get_kind ( ) == NodeKind :: File {
635+ Err ( Errno :: Notdir ) ?;
636+ }
637+
638+ return node. traverse_lstat ( rest) ;
635639 }
636640
637- let inner = self . inner . read ( ) . await ;
638- let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
639641 node. get_file_attributes ( )
640642 } ,
641643 None ,
@@ -646,15 +648,17 @@ impl VfsNode for MemDirectory {
646648 block_on (
647649 async {
648650 let ( component, rest) = path. split_once ( "/" ) . unwrap_or ( ( path, "" ) ) ;
651+ let inner = self . inner . read ( ) . await ;
652+ let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
649653
650654 if !rest. is_empty ( ) {
651- let inner = self . inner . read ( ) . await ;
652- let directory = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
653- return directory. traverse_stat ( rest) ;
655+ if node. get_kind ( ) == NodeKind :: File {
656+ Err ( Errno :: Notdir ) ?;
657+ }
658+
659+ return node. traverse_stat ( rest) ;
654660 }
655661
656- let inner = self . inner . read ( ) . await ;
657- let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
658662 node. get_file_attributes ( )
659663 } ,
660664 None ,
0 commit comments