diff --git a/src/hostcalls_impl/fs.rs b/src/hostcalls_impl/fs.rs index ecbfdc5..f3eb683 100644 --- a/src/hostcalls_impl/fs.rs +++ b/src/hostcalls_impl/fs.rs @@ -440,6 +440,7 @@ pub(crate) fn fd_allocate( let current_size = metadata.len(); let wanted_size = offset.checked_add(len).ok_or(host::__WASI_E2BIG)?; + // This check will be unnecessary when rust-lang/rust#63326 is fixed if wanted_size > i64::max_value() as u64 { return Err(host::__WASI_E2BIG); } @@ -779,11 +780,11 @@ pub(crate) fn fd_filestat_set_size( .and_then(|fe| fe.fd_object.descriptor.as_file())?; let st_size = dec_filesize(st_size); + // This check will be unnecessary when rust-lang/rust#63326 is fixed if st_size > i64::max_value() as u64 { return Err(host::__WASI_E2BIG); } - - hostcalls_impl::fd_filestat_set_size(fd, st_size) + fd.set_len(st_size).map_err(errno_from_ioerror) } pub(crate) fn path_filestat_get( diff --git a/src/sys/unix/hostcalls_impl/fs.rs b/src/sys/unix/hostcalls_impl/fs.rs index c0e1365..cec90c6 100644 --- a/src/sys/unix/hostcalls_impl/fs.rs +++ b/src/sys/unix/hostcalls_impl/fs.rs @@ -406,12 +406,6 @@ pub(crate) fn fd_filestat_set_times( } } -pub(crate) fn fd_filestat_set_size(fd: &File, st_size: host::__wasi_filesize_t) -> Result<()> { - use nix::unistd::ftruncate; - ftruncate(fd.as_raw_fd(), st_size as off_t) - .map_err(|e| host_impl::errno_from_nix(e.as_errno().unwrap())) -} - pub(crate) fn path_filestat_get( resolved: PathGet, dirflags: host::__wasi_lookupflags_t, diff --git a/src/sys/windows/hostcalls_impl/fs.rs b/src/sys/windows/hostcalls_impl/fs.rs index a375611..2c84f17 100644 --- a/src/sys/windows/hostcalls_impl/fs.rs +++ b/src/sys/windows/hostcalls_impl/fs.rs @@ -276,10 +276,6 @@ pub(crate) fn fd_filestat_set_times( unimplemented!("fd_filestat_set_times") } -pub(crate) fn fd_filestat_set_size(fd: &File, st_size: host::__wasi_filesize_t) -> Result<()> { - unimplemented!("fd_filestat_set_size") -} - pub(crate) fn path_filestat_get( resolved: PathGet, dirflags: host::__wasi_lookupflags_t,