99
1010#![ allow( dead_code) ]
1111
12+ use alloc:: borrow:: ToOwned ;
1213use alloc:: boxed:: Box ;
1314use alloc:: collections:: BTreeMap ;
1415use alloc:: string:: String ;
@@ -500,11 +501,9 @@ impl MemDirectory {
500501 mode : AccessPermission ,
501502 ) -> io:: Result < Arc < RwLock < dyn ObjectInterface > > > {
502503 if let Some ( component) = components. pop ( ) {
503- let node_name = String :: from ( component) ;
504-
505504 if components. is_empty ( ) {
506505 let mut guard = self . inner . write ( ) . await ;
507- if let Some ( file) = guard. get ( & node_name ) {
506+ if let Some ( file) = guard. get ( component ) {
508507 if opt. contains ( OpenOption :: O_DIRECTORY )
509508 && file. get_kind ( ) != NodeKind :: Directory
510509 {
@@ -518,7 +517,7 @@ impl MemDirectory {
518517 }
519518 } else if opt. contains ( OpenOption :: O_CREAT ) {
520519 let file = Box :: new ( RamFile :: new ( mode) ) ;
521- guard. insert ( node_name , file. clone ( ) ) ;
520+ guard. insert ( component . to_owned ( ) , file. clone ( ) ) ;
522521 return Ok ( Arc :: new ( RwLock :: new ( RamFileInterface :: new (
523522 file. data . clone ( ) ,
524523 ) ) ) ) ;
@@ -527,7 +526,7 @@ impl MemDirectory {
527526 }
528527 }
529528
530- if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name ) {
529+ if let Some ( directory) = self . inner . read ( ) . await . get ( component ) {
531530 return directory. traverse_open ( components, opt, mode) ;
532531 }
533532 }
@@ -555,17 +554,15 @@ impl VfsNode for MemDirectory {
555554 block_on (
556555 async {
557556 if let Some ( component) = components. pop ( ) {
558- let node_name = String :: from ( component) ;
559-
560- if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name) {
557+ if let Some ( directory) = self . inner . read ( ) . await . get ( component) {
561558 return directory. traverse_mkdir ( components, mode) ;
562559 }
563560
564561 if components. is_empty ( ) {
565562 self . inner
566563 . write ( )
567564 . await
568- . insert ( node_name , Box :: new ( MemDirectory :: new ( mode) ) ) ;
565+ . insert ( component . to_owned ( ) , Box :: new ( MemDirectory :: new ( mode) ) ) ;
569566 return Ok ( ( ) ) ;
570567 }
571568 }
@@ -580,19 +577,17 @@ impl VfsNode for MemDirectory {
580577 block_on (
581578 async {
582579 if let Some ( component) = components. pop ( ) {
583- let node_name = String :: from ( component) ;
584-
585580 if components. is_empty ( ) {
586581 let mut guard = self . inner . write ( ) . await ;
587582
588- let obj = guard. remove ( & node_name ) . ok_or ( Errno :: Noent ) ?;
583+ let obj = guard. remove ( component ) . ok_or ( Errno :: Noent ) ?;
589584 if obj. get_kind ( ) == NodeKind :: Directory {
590585 return Ok ( ( ) ) ;
591586 } else {
592- guard. insert ( node_name , obj) ;
587+ guard. insert ( component . to_owned ( ) , obj) ;
593588 return Err ( Errno :: Notdir ) ;
594589 }
595- } else if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name ) {
590+ } else if let Some ( directory) = self . inner . read ( ) . await . get ( component ) {
596591 return directory. traverse_rmdir ( components) ;
597592 }
598593 }
@@ -607,19 +602,17 @@ impl VfsNode for MemDirectory {
607602 block_on (
608603 async {
609604 if let Some ( component) = components. pop ( ) {
610- let node_name = String :: from ( component) ;
611-
612605 if components. is_empty ( ) {
613606 let mut guard = self . inner . write ( ) . await ;
614607
615- let obj = guard. remove ( & node_name ) . ok_or ( Errno :: Noent ) ?;
608+ let obj = guard. remove ( component ) . ok_or ( Errno :: Noent ) ?;
616609 if obj. get_kind ( ) == NodeKind :: File {
617610 return Ok ( ( ) ) ;
618611 } else {
619- guard. insert ( node_name , obj) ;
612+ guard. insert ( component . to_owned ( ) , obj) ;
620613 return Err ( Errno :: Isdir ) ;
621614 }
622- } else if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name ) {
615+ } else if let Some ( directory) = self . inner . read ( ) . await . get ( component ) {
623616 return directory. traverse_unlink ( components) ;
624617 }
625618 }
@@ -634,9 +627,7 @@ impl VfsNode for MemDirectory {
634627 block_on (
635628 async {
636629 if let Some ( component) = components. pop ( ) {
637- let node_name = String :: from ( component) ;
638-
639- if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name) {
630+ if let Some ( directory) = self . inner . read ( ) . await . get ( component) {
640631 directory. traverse_readdir ( components)
641632 } else {
642633 Err ( Errno :: Badf )
@@ -658,15 +649,13 @@ impl VfsNode for MemDirectory {
658649 block_on (
659650 async {
660651 if let Some ( component) = components. pop ( ) {
661- let node_name = String :: from ( component) ;
662-
663652 if components. is_empty ( )
664- && let Some ( node) = self . inner . read ( ) . await . get ( & node_name )
653+ && let Some ( node) = self . inner . read ( ) . await . get ( component )
665654 {
666655 return node. get_file_attributes ( ) ;
667656 }
668657
669- if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name ) {
658+ if let Some ( directory) = self . inner . read ( ) . await . get ( component ) {
670659 directory. traverse_lstat ( components)
671660 } else {
672661 Err ( Errno :: Badf )
@@ -683,15 +672,13 @@ impl VfsNode for MemDirectory {
683672 block_on (
684673 async {
685674 if let Some ( component) = components. pop ( ) {
686- let node_name = String :: from ( component) ;
687-
688675 if components. is_empty ( )
689- && let Some ( node) = self . inner . read ( ) . await . get ( & node_name )
676+ && let Some ( node) = self . inner . read ( ) . await . get ( component )
690677 {
691678 return node. get_file_attributes ( ) ;
692679 }
693680
694- if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name ) {
681+ if let Some ( directory) = self . inner . read ( ) . await . get ( component ) {
695682 directory. traverse_stat ( components)
696683 } else {
697684 Err ( Errno :: Badf )
@@ -712,14 +699,12 @@ impl VfsNode for MemDirectory {
712699 block_on (
713700 async {
714701 if let Some ( component) = components. pop ( ) {
715- let node_name = String :: from ( component) ;
716-
717- if let Some ( directory) = self . inner . read ( ) . await . get ( & node_name) {
702+ if let Some ( directory) = self . inner . read ( ) . await . get ( component) {
718703 return directory. traverse_mount ( components, obj) ;
719704 }
720705
721706 if components. is_empty ( ) {
722- self . inner . write ( ) . await . insert ( node_name , obj) ;
707+ self . inner . write ( ) . await . insert ( component . to_owned ( ) , obj) ;
723708 return Ok ( ( ) ) ;
724709 }
725710 }
0 commit comments