extension_host: Replace backslashes with forward slashes for cwd on Windows (#38072)
Jakub Konka
created 2 months ago
Instead of passing CWD verbatim from the Windows host with backslashes
and all, we now rewrite it into a more POSIX-happy format featuring
forward slashes which means `std::path::Path` operations now work within
WASI with Windows-style paths.
Release Notes:
- N/A
Change summary
crates/extension_host/src/wasm_host.rs | 8 +++++---
extensions/test-extension/src/test_extension.rs | 4 ++++
2 files changed, 9 insertions(+), 3 deletions(-)
Detailed changes
@@ -666,15 +666,17 @@ impl WasmHost {
let file_perms = wasi::FilePerms::all();
let dir_perms = wasi::DirPerms::all();
- let path = SanitizedPath::new(&extension_work_dir);
+ let path = SanitizedPath::new(&extension_work_dir).to_string();
+ #[cfg(target_os = "windows")]
+ let path = path.replace('\\', "/");
let mut ctx = wasi::WasiCtxBuilder::new();
ctx.inherit_stdio()
- .env("PWD", path.to_string())
+ .env("PWD", &path)
.env("RUST_BACKTRACE", "full");
ctx.preopened_dir(&path, ".", dir_perms, file_perms)?;
- ctx.preopened_dir(&path, path.to_string(), dir_perms, file_perms)?;
+ ctx.preopened_dir(&path, &path, dir_perms, file_perms)?;
Ok(ctx.build())
}
@@ -18,6 +18,10 @@ impl TestExtension {
let current_dir = std::env::current_dir().unwrap();
println!("current_dir: {}", current_dir.display());
+ assert_eq!(
+ current_dir.file_name().unwrap().to_str().unwrap(),
+ "test-extension"
+ );
fs::create_dir_all(current_dir.join("dir-created-with-abs-path")).unwrap();
fs::create_dir_all("./dir-created-with-rel-path").unwrap();