Fixes for capi

This commit is contained in:
Johnathan Sharratt
2023-06-27 12:47:10 +10:00
parent b54275ff4f
commit fab5c7b3dc
2 changed files with 10 additions and 12 deletions

View File

@ -11,7 +11,6 @@ use super::{
types::wasm_byte_vec_t,
};
use crate::error::update_last_error;
use lazy_static::__Deref;
use std::convert::TryFrom;
use std::ffi::CStr;
use std::os::raw::c_char;
@ -19,8 +18,9 @@ use std::slice;
#[cfg(feature = "webc_runner")]
use wasmer_api::{AsStoreMut, Imports, Module};
use wasmer_wasix::{
default_fs_backing, get_wasi_version, virtual_fs::AsyncReadExt, virtual_fs::VirtualFile, Pipe,
VirtualTaskManager, WasiEnv, WasiEnvBuilder, WasiFunctionEnv, WasiVersion,
default_fs_backing, get_wasi_version, runtime::task_manager::InlineWaker,
virtual_fs::AsyncReadExt, virtual_fs::VirtualFile, Pipe, WasiEnv, WasiEnvBuilder,
WasiFunctionEnv, WasiVersion,
};
#[derive(Debug)]
@ -355,14 +355,14 @@ pub unsafe extern "C" fn wasi_env_read_stdout(
let inner_buffer = slice::from_raw_parts_mut(buffer as *mut _, buffer_len);
let store = env.store.store();
let (stdout, tasks) = {
let stdout = {
let data = env.inner.data(&store);
(data.stdout(), data.tasks().clone())
data.stdout()
};
if let Ok(mut stdout) = stdout {
if let Some(stdout) = stdout.as_mut() {
read_inner(tasks.deref(), stdout, inner_buffer)
read_inner(stdout, inner_buffer)
} else {
update_last_error("could not find a file handle for `stdout`");
-1
@ -381,13 +381,13 @@ pub unsafe extern "C" fn wasi_env_read_stderr(
) -> isize {
let inner_buffer = slice::from_raw_parts_mut(buffer as *mut _, buffer_len);
let store = env.store.store();
let (stderr, tasks) = {
let stderr = {
let data = env.inner.data(&store);
(data.stderr(), data.tasks().clone())
data.stderr()
};
if let Ok(mut stderr) = stderr {
if let Some(stderr) = stderr.as_mut() {
read_inner(tasks.deref(), stderr, inner_buffer)
read_inner(stderr, inner_buffer)
} else {
update_last_error("could not find a file handle for `stderr`");
-1
@ -399,11 +399,10 @@ pub unsafe extern "C" fn wasi_env_read_stderr(
}
fn read_inner(
tasks: &dyn VirtualTaskManager,
wasi_file: &mut Box<dyn VirtualFile + Send + Sync + 'static>,
inner_buffer: &mut [u8],
) -> isize {
tasks.block_on(async {
InlineWaker::block_on(async {
match wasi_file.read(inner_buffer).await {
Ok(a) => a as isize,
Err(err) => {