@@ -46,6 +46,7 @@ impl DirNode {
4646 log:: error!( "AlreadyExists {}" , name) ;
4747 return Err ( VfsError :: AlreadyExists ) ;
4848 }
49+ log:: debug!( "Creating node {:?} {}" , ty, name) ;
4950 let node: VfsNodeRef = match ty {
5051 VfsNodeType :: File => Arc :: new ( FileNode :: new ( ) ) ,
5152 VfsNodeType :: Dir => Self :: new ( Some ( self . this . clone ( ) ) ) ,
@@ -67,6 +68,22 @@ impl DirNode {
6768 children. remove ( name) ;
6869 Ok ( ( ) )
6970 }
71+ pub fn rename_node ( & self , old_name : & str , new_name : & str ) -> VfsResult {
72+ let mut children = self . children . write ( ) ;
73+
74+ // 从/tmp/f1取出f1
75+ let old_name = old_name. split ( '/' ) . last ( ) . unwrap ( ) ;
76+ let new_name = new_name. split ( '/' ) . last ( ) . unwrap ( ) ;
77+ if !children. contains_key ( old_name) {
78+ return Err ( VfsError :: NotFound ) ;
79+ }
80+ if children. contains_key ( new_name) {
81+ return Err ( VfsError :: AlreadyExists ) ;
82+ }
83+ let node = children. remove ( old_name) . unwrap ( ) ;
84+ children. insert ( new_name. into ( ) , node) ;
85+ Ok ( ( ) )
86+ }
7087}
7188
7289impl VfsNodeOps for DirNode {
@@ -164,8 +181,11 @@ impl VfsNodeOps for DirNode {
164181 self . remove_node ( name)
165182 }
166183 }
167-
168- axfs_vfs:: impl_vfs_dir_default! { }
184+ // axfs_vfs::impl_vfs_dir_default! {}
185+ fn rename ( & self , src_path : & str , dst_path : & str ) -> VfsResult {
186+ self . rename_node ( src_path, dst_path)
187+ }
188+
169189}
170190
171191fn split_path ( path : & str ) -> ( & str , Option < & str > ) {
0 commit comments