diff --git a/crates/test-programs/wasi-tests/src/bin/path_symlink_trailing_slashes.rs b/crates/test-programs/wasi-tests/src/bin/path_symlink_trailing_slashes.rs index 95e53790c0..db4440c56a 100644 --- a/crates/test-programs/wasi-tests/src/bin/path_symlink_trailing_slashes.rs +++ b/crates/test-programs/wasi-tests/src/bin/path_symlink_trailing_slashes.rs @@ -1,65 +1,65 @@ use std::{env, process}; -use wasi_tests::{assert_errno, create_file, open_scratch_directory}; +use wasi_tests::{assert_errno, create_file, open_scratch_directory, TESTCONFIG}; unsafe fn test_path_symlink_trailing_slashes(dir_fd: wasi::Fd) { - // XXX following section invalid on windows because its a dangling symlink - // Dangling symlink: Link destination shouldn't end with a slash. - assert_errno!( - wasi::path_symlink("source", dir_fd, "target/") - .expect_err("link destination ending with a slash should fail") - .raw_error(), - wasi::ERRNO_NOENT - ); + if TESTCONFIG.support_dangling_symlinks() { + // Dangling symlink: Link destination shouldn't end with a slash. + assert_errno!( + wasi::path_symlink("source", dir_fd, "target/") + .expect_err("link destination ending with a slash should fail") + .raw_error(), + wasi::ERRNO_NOENT + ); - // Dangling symlink: Without the trailing slash, this should succeed. - wasi::path_symlink("source", dir_fd, "target").expect("link destination ending with a slash"); - wasi::path_unlink_file(dir_fd, "target").expect("removing a file"); + // Dangling symlink: Without the trailing slash, this should succeed. + wasi::path_symlink("source", dir_fd, "target") + .expect("link destination ending with a slash"); + wasi::path_unlink_file(dir_fd, "target").expect("removing a file"); + } // Link destination already exists, target has trailing slash. wasi::path_create_directory(dir_fd, "target").expect("creating a directory"); - // XXX windows gives NOENT assert_errno!( wasi::path_symlink("source", dir_fd, "target/") .expect_err("link destination already exists") .raw_error(), - windows => wasi::ERRNO_NOENT, - wasi::ERRNO_EXIST + unix => wasi::ERRNO_EXIST, + windows => wasi::ERRNO_NOENT ); wasi::path_remove_directory(dir_fd, "target").expect("removing a directory"); // Link destination already exists, target has no trailing slash. wasi::path_create_directory(dir_fd, "target").expect("creating a directory"); - // XXX windows gives NOENT assert_errno!( wasi::path_symlink("source", dir_fd, "target") .expect_err("link destination already exists") .raw_error(), - wasi::ERRNO_EXIST + unix => wasi::ERRNO_EXIST, + windows => wasi::ERRNO_NOENT ); wasi::path_remove_directory(dir_fd, "target").expect("removing a directory"); // Link destination already exists, target has trailing slash. create_file(dir_fd, "target"); - // XXX windows gives NOENT assert_errno!( wasi::path_symlink("source", dir_fd, "target/") .expect_err("link destination already exists") .raw_error(), - wasi::ERRNO_EXIST, - wasi::ERRNO_NOTDIR + unix => wasi::ERRNO_NOTDIR, + windows => wasi::ERRNO_NOENT ); wasi::path_unlink_file(dir_fd, "target").expect("removing a file"); // Link destination already exists, target has no trailing slash. create_file(dir_fd, "target"); - // XXX windows gives NOENT assert_errno!( wasi::path_symlink("source", dir_fd, "target") .expect_err("link destination already exists") .raw_error(), - wasi::ERRNO_EXIST + unix => wasi::ERRNO_EXIST, + windows => wasi::ERRNO_NOENT ); wasi::path_unlink_file(dir_fd, "target").expect("removing a file"); }