TODO: atomicity
(&self, src_name: &str, dst_dir: &DirNode, dst_name: &str)
| 426 | |
| 427 | // TODO: atomicity |
| 428 | fn rename(&self, src_name: &str, dst_dir: &DirNode, dst_name: &str) -> VfsResult<()> { |
| 429 | let dst_node = dst_dir.downcast::<Self>()?; |
| 430 | if let Ok(entry) = dst_dir.lookup(dst_name) { |
| 431 | let src_entry = self.lookup(src_name)?; |
| 432 | if entry.inode() == src_entry.inode() { |
| 433 | return Ok(()); |
| 434 | } |
| 435 | } |
| 436 | |
| 437 | let src_entry = self |
| 438 | .inode |
| 439 | .as_dir()? |
| 440 | .entries |
| 441 | .lock() |
| 442 | .remove(src_name) |
| 443 | .ok_or(VfsError::NotFound)?; |
| 444 | dst_node |
| 445 | .inode |
| 446 | .as_dir()? |
| 447 | .entries |
| 448 | .lock() |
| 449 | .insert(dst_name.into(), src_entry); |
| 450 | Ok(()) |
| 451 | } |
| 452 | } |
| 453 | |
| 454 | impl Drop for MemoryNode { |
no test coverage detected