|
@ -1,29 +1,31 @@ |
|
|
use std::{env, process}; |
|
|
use std::{env, process}; |
|
|
use wasi_tests::{assert_errno, open_scratch_directory}; |
|
|
use wasi_tests::{assert_errno, open_scratch_directory, TESTCONFIG}; |
|
|
|
|
|
|
|
|
unsafe fn test_dangling_symlink(dir_fd: wasi::Fd) { |
|
|
unsafe fn test_dangling_symlink(dir_fd: wasi::Fd) { |
|
|
// First create a dangling symlink.
|
|
|
if TESTCONFIG.support_dangling_symlinks() { |
|
|
wasi::path_symlink("target", dir_fd, "symlink").expect("creating a symlink"); |
|
|
// First create a dangling symlink.
|
|
|
|
|
|
wasi::path_symlink("target", dir_fd, "symlink").expect("creating a symlink"); |
|
|
|
|
|
|
|
|
// Try to open it as a directory with O_NOFOLLOW.
|
|
|
// Try to open it as a directory with O_NOFOLLOW.
|
|
|
assert_errno!( |
|
|
assert_errno!( |
|
|
wasi::path_open(dir_fd, 0, "symlink", wasi::OFLAGS_DIRECTORY, 0, 0, 0) |
|
|
wasi::path_open(dir_fd, 0, "symlink", wasi::OFLAGS_DIRECTORY, 0, 0, 0) |
|
|
.expect_err("opening a dangling symlink as a directory") |
|
|
.expect_err("opening a dangling symlink as a directory") |
|
|
.raw_error(), |
|
|
.raw_error(), |
|
|
wasi::ERRNO_NOTDIR, |
|
|
wasi::ERRNO_NOTDIR, |
|
|
wasi::ERRNO_LOOP |
|
|
wasi::ERRNO_LOOP |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
// Try to open it as a file with O_NOFOLLOW.
|
|
|
// Try to open it as a file with O_NOFOLLOW.
|
|
|
assert_errno!( |
|
|
assert_errno!( |
|
|
wasi::path_open(dir_fd, 0, "symlink", 0, 0, 0, 0) |
|
|
wasi::path_open(dir_fd, 0, "symlink", 0, 0, 0, 0) |
|
|
.expect_err("opening a dangling symlink as a file") |
|
|
.expect_err("opening a dangling symlink as a file") |
|
|
.raw_error(), |
|
|
.raw_error(), |
|
|
wasi::ERRNO_LOOP |
|
|
wasi::ERRNO_LOOP |
|
|
); |
|
|
); |
|
|
|
|
|
|
|
|
// Clean up.
|
|
|
// Clean up.
|
|
|
wasi::path_unlink_file(dir_fd, "symlink").expect("failed to remove file"); |
|
|
wasi::path_unlink_file(dir_fd, "symlink").expect("failed to remove file"); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
fn main() { |
|
|
fn main() { |
|
|