diff --git a/host/tests/command.rs b/host/tests/command.rs index 49eccea6..bb8e85b3 100644 --- a/host/tests/command.rs +++ b/host/tests/command.rs @@ -357,7 +357,7 @@ async fn run_directory_seek(store: Store, wasi: Command) -> Result<()> } async fn run_fd_advise(store: Store, wasi: Command) -> Result<()> { - expect_fail(run_with_temp_dir(store, wasi).await) + run_with_temp_dir(store, wasi).await } async fn run_fd_filestat_get(store: Store, wasi: Command) -> Result<()> { @@ -377,7 +377,7 @@ async fn run_fd_readdir(store: Store, wasi: Command) -> Result<()> { } async fn run_file_allocate(store: Store, wasi: Command) -> Result<()> { - expect_fail(run_with_temp_dir(store, wasi).await) + run_with_temp_dir(store, wasi).await } async fn run_file_pread_pwrite(store: Store, wasi: Command) -> Result<()> { diff --git a/src/lib.rs b/src/lib.rs index 0f206eb5..5304d54d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -407,8 +407,10 @@ pub unsafe extern "C" fn fd_advise( pub unsafe extern "C" fn fd_allocate(fd: Fd, offset: Filesize, len: Filesize) -> Errno { State::with(|state| { let ds = state.descriptors(); + // For not-files, fail with BADF let file = ds.get_file(fd)?; - unreachable!("fd_allocate is unimplemented") + // For all files, fail with NOTSUP, because this call does not exist in preview 2. + Err(wasi::ERRNO_NOTSUP) }) } diff --git a/test-programs/wasi-tests/src/bin/fd_advise.rs b/test-programs/wasi-tests/src/bin/fd_advise.rs index 62346fdc..d6c37ae7 100644 --- a/test-programs/wasi-tests/src/bin/fd_advise.rs +++ b/test-programs/wasi-tests/src/bin/fd_advise.rs @@ -1,5 +1,5 @@ use std::{env, process}; -use wasi_tests::{open_scratch_directory, TESTCONFIG}; +use wasi_tests::open_scratch_directory; unsafe fn test_fd_advise(dir_fd: wasi::Fd) { // Create a file in the scratch directory. @@ -40,14 +40,6 @@ unsafe fn test_fd_advise(dir_fd: wasi::Fd) { let stat = wasi::fd_filestat_get(file_fd).expect("failed to fdstat 3"); assert_eq!(stat.size, 100, "file size should be 100"); - if TESTCONFIG.support_fd_allocate() { - // Use fd_allocate to expand size to 200: - wasi::fd_allocate(file_fd, 100, 100).expect("allocating size"); - - let stat = wasi::fd_filestat_get(file_fd).expect("failed to fdstat 3"); - assert_eq!(stat.size, 200, "file size should be 200"); - } - wasi::fd_close(file_fd).expect("failed to close"); wasi::path_unlink_file(dir_fd, "file").expect("failed to unlink"); } diff --git a/test-programs/wasi-tests/src/bin/file_allocate.rs b/test-programs/wasi-tests/src/bin/file_allocate.rs index da793154..9008002e 100644 --- a/test-programs/wasi-tests/src/bin/file_allocate.rs +++ b/test-programs/wasi-tests/src/bin/file_allocate.rs @@ -1,5 +1,5 @@ use std::{env, process}; -use wasi_tests::{open_scratch_directory, TESTCONFIG}; +use wasi_tests::open_scratch_directory; unsafe fn test_file_allocate(dir_fd: wasi::Fd) { // Create a file in the scratch directory. @@ -25,22 +25,19 @@ unsafe fn test_file_allocate(dir_fd: wasi::Fd) { let mut stat = wasi::fd_filestat_get(file_fd).expect("reading file stats"); assert_eq!(stat.size, 0, "file size should be 0"); - if TESTCONFIG.support_fd_allocate() { - // Allocate some size - wasi::fd_allocate(file_fd, 0, 100).expect("allocating size"); - stat = wasi::fd_filestat_get(file_fd).expect("reading file stats"); - assert_eq!(stat.size, 100, "file size should be 100"); + // Allocate some size + let err = wasi::fd_allocate(file_fd, 0, 100) + .err() + .expect("fd_allocate must fail"); + assert_eq!( + err, + wasi::ERRNO_NOTSUP, + "fd_allocate should fail with NOTSUP" + ); - // Allocate should not modify if less than current size - wasi::fd_allocate(file_fd, 10, 10).expect("allocating size less than current size"); - stat = wasi::fd_filestat_get(file_fd).expect("reading file stats"); - assert_eq!(stat.size, 100, "file size should remain unchanged at 100"); + stat = wasi::fd_filestat_get(file_fd).expect("reading file stats"); + assert_eq!(stat.size, 0, "file size should still be 0"); - // Allocate should modify if offset+len > current_len - wasi::fd_allocate(file_fd, 90, 20).expect("allocating size larger than current size"); - stat = wasi::fd_filestat_get(file_fd).expect("reading file stats"); - assert_eq!(stat.size, 110, "file size should increase from 100 to 110"); - } wasi::fd_close(file_fd).expect("closing a file"); wasi::path_unlink_file(dir_fd, "file").expect("removing a file"); } diff --git a/test-programs/wasi-tests/src/config.rs b/test-programs/wasi-tests/src/config.rs index b5005b59..0b223aca 100644 --- a/test-programs/wasi-tests/src/config.rs +++ b/test-programs/wasi-tests/src/config.rs @@ -1,7 +1,6 @@ pub struct TestConfig { errno_mode: ErrnoMode, no_dangling_filesystem: bool, - no_fd_allocate: bool, no_rename_dir_to_empty_dir: bool, no_fdflags_sync_support: bool, no_rights_readback_support: bool, @@ -26,7 +25,6 @@ impl TestConfig { ErrnoMode::Permissive }; let no_dangling_filesystem = std::env::var("NO_DANGLING_FILESYSTEM").is_ok(); - let no_fd_allocate = std::env::var("NO_FD_ALLOCATE").is_ok(); let no_rename_dir_to_empty_dir = std::env::var("NO_RENAME_DIR_TO_EMPTY_DIR").is_ok(); let no_fdflags_sync_support = std::env::var("NO_FDFLAGS_SYNC_SUPPORT").is_ok(); // Current support for rights readback is buggy, lets ignore that in tests and get @@ -35,7 +33,6 @@ impl TestConfig { TestConfig { errno_mode, no_dangling_filesystem, - no_fd_allocate, no_rename_dir_to_empty_dir, no_fdflags_sync_support, no_rights_readback_support, @@ -62,9 +59,6 @@ impl TestConfig { pub fn support_dangling_filesystem(&self) -> bool { !self.no_dangling_filesystem } - pub fn support_fd_allocate(&self) -> bool { - !self.no_fd_allocate - } pub fn support_rename_dir_to_empty_dir(&self) -> bool { !self.no_rename_dir_to_empty_dir }