@@ -614,15 +614,17 @@ impl VfsNode for MemDirectory {
614614 block_on (
615615 async {
616616 let ( component, rest) = path. split_once ( "/" ) . unwrap_or ( ( path, "" ) ) ;
617+ let inner = self . inner . read ( ) . await ;
618+ let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
617619
618620 if !rest. is_empty ( ) {
619- let inner = self . inner . read ( ) . await ;
620- let directory = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
621- return directory. traverse_lstat ( rest) ;
621+ if node. get_kind ( ) == NodeKind :: File {
622+ Err ( Errno :: Notdir ) ?;
623+ }
624+
625+ return node. traverse_lstat ( rest) ;
622626 }
623627
624- let inner = self . inner . read ( ) . await ;
625- let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
626628 node. get_file_attributes ( )
627629 } ,
628630 None ,
@@ -633,15 +635,17 @@ impl VfsNode for MemDirectory {
633635 block_on (
634636 async {
635637 let ( component, rest) = path. split_once ( "/" ) . unwrap_or ( ( path, "" ) ) ;
638+ let inner = self . inner . read ( ) . await ;
639+ let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
636640
637641 if !rest. is_empty ( ) {
638- let inner = self . inner . read ( ) . await ;
639- let directory = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
640- return directory. traverse_stat ( rest) ;
642+ if node. get_kind ( ) == NodeKind :: File {
643+ Err ( Errno :: Notdir ) ?;
644+ }
645+
646+ return node. traverse_stat ( rest) ;
641647 }
642648
643- let inner = self . inner . read ( ) . await ;
644- let node = inner. get ( component) . ok_or ( Errno :: Badf ) ?;
645649 node. get_file_attributes ( )
646650 } ,
647651 None ,
0 commit comments