diff --git a/lib/virtual-fs/src/mem_fs/filesystem.rs b/lib/virtual-fs/src/mem_fs/filesystem.rs index c1d72bc493b..17ce1bf31df 100644 --- a/lib/virtual-fs/src/mem_fs/filesystem.rs +++ b/lib/virtual-fs/src/mem_fs/filesystem.rs @@ -739,7 +739,11 @@ impl FileSystemInner { Some(Err(FsError::DirectoryNotEmpty)) } } - + Node::ArcDirectory(ArcDirectoryNode { name, fs, path, .. }) + if name.as_os_str() == name_of_directory => + { + Some(Ok((0, InodeResolution::Redirect(fs.clone(), path.clone())))) + } _ => None, }) .ok_or(FsError::InvalidInput) diff --git a/tests/wasi-fyi/fs_remove_dir_all.rs b/tests/wasi-fyi/fs_remove_dir_all.rs new file mode 100644 index 00000000000..fcfba4cc94e --- /dev/null +++ b/tests/wasi-fyi/fs_remove_dir_all.rs @@ -0,0 +1,15 @@ +use std::fs; + +fn main() { + assert!(fs::create_dir_all("/fyi/foo/bar").is_ok()); + assert!(fs::create_dir_all("/fyi/foo/baz").is_ok()); + assert_eq!( + fs::read_dir("/fyi/foo") + .unwrap() + .map(|e| e.unwrap().file_name()) + .collect::>(), + vec!["bar", "baz"] + ); + assert!(fs::remove_dir_all("/fyi/foo").is_ok()); + assert!(fs::read_dir("/fyi/foo").is_err()); +}