|
|
@@ -46,26 +46,54 @@ typedef struct iovec_app {
|
|
|
} iovec_app_t;
|
|
|
|
|
|
typedef struct WASIContext {
|
|
|
- void *curfds;
|
|
|
- void *prestats;
|
|
|
- void *argv_environ;
|
|
|
+ int32 curfds_offset;
|
|
|
+ int32 prestats_offset;
|
|
|
+ int32 argv_environ_offset;
|
|
|
} *wasi_ctx_t;
|
|
|
|
|
|
wasi_ctx_t
|
|
|
wasm_runtime_get_wasi_ctx(wasm_module_inst_t module_inst);
|
|
|
|
|
|
+static struct fd_table *
|
|
|
+wasi_ctx_get_curfds(wasm_module_inst_t module_inst,
|
|
|
+ wasi_ctx_t wasi_ctx)
|
|
|
+{
|
|
|
+ return (struct fd_table *)
|
|
|
+ wasm_runtime_addr_app_to_native(module_inst,
|
|
|
+ wasi_ctx->curfds_offset);
|
|
|
+}
|
|
|
+
|
|
|
+static struct argv_environ_values *
|
|
|
+wasi_ctx_get_argv_environ(wasm_module_inst_t module_inst,
|
|
|
+ wasi_ctx_t wasi_ctx)
|
|
|
+{
|
|
|
+ return (struct argv_environ_values *)
|
|
|
+ wasm_runtime_addr_app_to_native(module_inst,
|
|
|
+ wasi_ctx->argv_environ_offset);
|
|
|
+}
|
|
|
+
|
|
|
+static struct fd_prestats *
|
|
|
+wasi_ctx_get_prestats(wasm_module_inst_t module_inst,
|
|
|
+ wasi_ctx_t wasi_ctx)
|
|
|
+{
|
|
|
+ return (struct fd_prestats *)
|
|
|
+ wasm_runtime_addr_app_to_native(module_inst,
|
|
|
+ wasi_ctx->prestats_offset);
|
|
|
+}
|
|
|
+
|
|
|
static wasi_errno_t
|
|
|
wasi_args_get(wasm_exec_env_t exec_env, int32 *argv_offsets, char *argv_buf)
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct argv_environ_values *argv_environ =
|
|
|
+ wasi_ctx_get_argv_environ(module_inst, wasi_ctx);
|
|
|
size_t argc, argv_buf_size, i;
|
|
|
char **argv;
|
|
|
uint64 total_size;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
- err = wasmtime_ssp_args_sizes_get(wasi_ctx->argv_environ,
|
|
|
- &argc, &argv_buf_size);
|
|
|
+ err = wasmtime_ssp_args_sizes_get(argv_environ, &argc, &argv_buf_size);
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
@@ -81,7 +109,7 @@ wasi_args_get(wasm_exec_env_t exec_env, int32 *argv_offsets, char *argv_buf)
|
|
|
|| !(argv = wasm_runtime_malloc((uint32)total_size)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_args_get(wasi_ctx->argv_environ, argv, argv_buf);
|
|
|
+ err = wasmtime_ssp_args_get(argv_environ, argv, argv_buf);
|
|
|
if (err) {
|
|
|
wasm_runtime_free(argv);
|
|
|
return err;
|
|
|
@@ -101,6 +129,7 @@ wasi_args_sizes_get(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct argv_environ_values *argv_environ;
|
|
|
size_t argc, argv_buf_size;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
@@ -108,7 +137,11 @@ wasi_args_sizes_get(wasm_exec_env_t exec_env,
|
|
|
|| !validate_native_addr(argv_buf_size_app, sizeof(uint32)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_args_sizes_get(wasi_ctx->argv_environ,
|
|
|
+ argv_environ = (struct argv_environ_values *)
|
|
|
+ wasm_runtime_addr_app_to_native(module_inst,
|
|
|
+ wasi_ctx->argv_environ_offset);
|
|
|
+
|
|
|
+ err = wasmtime_ssp_args_sizes_get(argv_environ,
|
|
|
&argc, &argv_buf_size);
|
|
|
if (err)
|
|
|
return err;
|
|
|
@@ -151,12 +184,14 @@ wasi_environ_get(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct argv_environ_values *argv_environ =
|
|
|
+ wasi_ctx_get_argv_environ(module_inst, wasi_ctx);
|
|
|
size_t environ_count, environ_buf_size, i;
|
|
|
uint64 total_size;
|
|
|
char **environs;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
- err = wasmtime_ssp_environ_sizes_get(wasi_ctx->argv_environ,
|
|
|
+ err = wasmtime_ssp_environ_sizes_get(argv_environ,
|
|
|
&environ_count, &environ_buf_size);
|
|
|
if (err)
|
|
|
return err;
|
|
|
@@ -174,7 +209,7 @@ wasi_environ_get(wasm_exec_env_t exec_env,
|
|
|
|| !(environs = wasm_runtime_malloc((uint32)total_size)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_environ_get(wasi_ctx->argv_environ, environs, environ_buf);
|
|
|
+ err = wasmtime_ssp_environ_get(argv_environ, environs, environ_buf);
|
|
|
if (err) {
|
|
|
wasm_runtime_free(environs);
|
|
|
return err;
|
|
|
@@ -194,6 +229,8 @@ wasi_environ_sizes_get(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct argv_environ_values *argv_environ =
|
|
|
+ wasi_ctx_get_argv_environ(module_inst, wasi_ctx);
|
|
|
size_t environ_count, environ_buf_size;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
@@ -201,7 +238,7 @@ wasi_environ_sizes_get(wasm_exec_env_t exec_env,
|
|
|
|| !validate_native_addr(environ_buf_size_app, sizeof(uint32)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_environ_sizes_get(wasi_ctx->argv_environ,
|
|
|
+ err = wasmtime_ssp_environ_sizes_get(argv_environ,
|
|
|
&environ_count, &environ_buf_size);
|
|
|
if (err)
|
|
|
return err;
|
|
|
@@ -218,13 +255,14 @@ wasi_fd_prestat_get(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx);
|
|
|
wasi_prestat_t prestat;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
if (!validate_native_addr(prestat_app, sizeof(wasi_prestat_app_t)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_fd_prestat_get(wasi_ctx->prestats, fd, &prestat);
|
|
|
+ err = wasmtime_ssp_fd_prestat_get(prestats, fd, &prestat);
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
@@ -239,8 +277,9 @@ wasi_fd_prestat_dir_name(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_prestat_dir_name(wasi_ctx->prestats,
|
|
|
+ return wasmtime_ssp_fd_prestat_dir_name(prestats,
|
|
|
fd, path, path_len);
|
|
|
}
|
|
|
|
|
|
@@ -249,8 +288,10 @@ wasi_fd_close(wasm_exec_env_t exec_env, wasi_fd_t fd)
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
+ struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_close(wasi_ctx->curfds, wasi_ctx->prestats, fd);
|
|
|
+ return wasmtime_ssp_fd_close(curfds, prestats, fd);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -258,8 +299,9 @@ wasi_fd_datasync(wasm_exec_env_t exec_env, wasi_fd_t fd)
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_datasync(wasi_ctx->curfds, fd);
|
|
|
+ return wasmtime_ssp_fd_datasync(curfds, fd);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -269,6 +311,7 @@ wasi_fd_pread(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_iovec_t *iovec, *iovec_begin;
|
|
|
uint64 total_size;
|
|
|
size_t nread;
|
|
|
@@ -298,7 +341,7 @@ wasi_fd_pread(wasm_exec_env_t exec_env,
|
|
|
iovec->buf_len = iovec_app->buf_len;
|
|
|
}
|
|
|
|
|
|
- err = wasmtime_ssp_fd_pread(wasi_ctx->curfds, fd, iovec_begin,
|
|
|
+ err = wasmtime_ssp_fd_pread(curfds, fd, iovec_begin,
|
|
|
iovs_len, offset, &nread);
|
|
|
if (err)
|
|
|
goto fail;
|
|
|
@@ -320,6 +363,7 @@ wasi_fd_pwrite(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_ciovec_t *ciovec, *ciovec_begin;
|
|
|
uint64 total_size;
|
|
|
size_t nwritten;
|
|
|
@@ -349,7 +393,7 @@ wasi_fd_pwrite(wasm_exec_env_t exec_env,
|
|
|
ciovec->buf_len = iovec_app->buf_len;
|
|
|
}
|
|
|
|
|
|
- err = wasmtime_ssp_fd_pwrite(wasi_ctx->curfds, fd, ciovec_begin,
|
|
|
+ err = wasmtime_ssp_fd_pwrite(curfds, fd, ciovec_begin,
|
|
|
iovs_len, offset, &nwritten);
|
|
|
if (err)
|
|
|
goto fail;
|
|
|
@@ -371,6 +415,7 @@ wasi_fd_read(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_iovec_t *iovec, *iovec_begin;
|
|
|
uint64 total_size;
|
|
|
size_t nread;
|
|
|
@@ -400,7 +445,7 @@ wasi_fd_read(wasm_exec_env_t exec_env,
|
|
|
iovec->buf_len = iovec_app->buf_len;
|
|
|
}
|
|
|
|
|
|
- err = wasmtime_ssp_fd_read(wasi_ctx->curfds, fd,
|
|
|
+ err = wasmtime_ssp_fd_read(curfds, fd,
|
|
|
iovec_begin, iovs_len, &nread);
|
|
|
if (err)
|
|
|
goto fail;
|
|
|
@@ -420,9 +465,10 @@ wasi_fd_renumber(wasm_exec_env_t exec_env, wasi_fd_t from, wasi_fd_t to)
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
+ struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_renumber(wasi_ctx->curfds,
|
|
|
- wasi_ctx->prestats, from, to);
|
|
|
+ return wasmtime_ssp_fd_renumber(curfds, prestats, from, to);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -432,12 +478,12 @@ wasi_fd_seek(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
if (!validate_native_addr(newoffset, sizeof(wasi_filesize_t)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- return wasmtime_ssp_fd_seek(wasi_ctx->curfds, fd,
|
|
|
- offset, whence, newoffset);
|
|
|
+ return wasmtime_ssp_fd_seek(curfds, fd, offset, whence, newoffset);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -446,11 +492,12 @@ wasi_fd_tell(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
if (!validate_native_addr(newoffset, sizeof(wasi_filesize_t)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- return wasmtime_ssp_fd_tell(wasi_ctx->curfds, fd, newoffset);
|
|
|
+ return wasmtime_ssp_fd_tell(curfds, fd, newoffset);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -459,13 +506,14 @@ wasi_fd_fdstat_get(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_fdstat_t fdstat;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
if (!validate_native_addr(fdstat_app, sizeof(wasi_fdstat_t)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_fd_fdstat_get(wasi_ctx->curfds, fd, &fdstat);
|
|
|
+ err = wasmtime_ssp_fd_fdstat_get(curfds, fd, &fdstat);
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
@@ -479,8 +527,9 @@ wasi_fd_fdstat_set_flags(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_fdstat_set_flags(wasi_ctx->curfds, fd, flags);
|
|
|
+ return wasmtime_ssp_fd_fdstat_set_flags(curfds, fd, flags);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -491,8 +540,9 @@ wasi_fd_fdstat_set_rights(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_fdstat_set_rights(wasi_ctx->curfds, fd,
|
|
|
+ return wasmtime_ssp_fd_fdstat_set_rights(curfds, fd,
|
|
|
fs_rights_base, fs_rights_inheriting);
|
|
|
}
|
|
|
|
|
|
@@ -501,8 +551,9 @@ wasi_fd_sync(wasm_exec_env_t exec_env, wasi_fd_t fd)
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_sync(wasi_ctx->curfds, fd);
|
|
|
+ return wasmtime_ssp_fd_sync(curfds, fd);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -512,6 +563,7 @@ wasi_fd_write(wasm_exec_env_t exec_env, wasi_fd_t fd,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_ciovec_t *ciovec, *ciovec_begin;
|
|
|
uint64 total_size;
|
|
|
size_t nwritten;
|
|
|
@@ -541,7 +593,7 @@ wasi_fd_write(wasm_exec_env_t exec_env, wasi_fd_t fd,
|
|
|
ciovec->buf_len = iovec_app->buf_len;
|
|
|
}
|
|
|
|
|
|
- err = wasmtime_ssp_fd_write(wasi_ctx->curfds, fd,
|
|
|
+ err = wasmtime_ssp_fd_write(curfds, fd,
|
|
|
ciovec_begin, iovs_len, &nwritten);
|
|
|
if (err)
|
|
|
goto fail;
|
|
|
@@ -565,8 +617,9 @@ wasi_fd_advise(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_advise(wasi_ctx->curfds, fd, offset, len, advice);
|
|
|
+ return wasmtime_ssp_fd_advise(curfds, fd, offset, len, advice);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -577,8 +630,9 @@ wasi_fd_allocate(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_allocate(wasi_ctx->curfds, fd, offset, len);
|
|
|
+ return wasmtime_ssp_fd_allocate(curfds, fd, offset, len);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -587,8 +641,9 @@ wasi_path_create_directory(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_path_create_directory(wasi_ctx->curfds, fd,
|
|
|
+ return wasmtime_ssp_path_create_directory(curfds, fd,
|
|
|
path, path_len);
|
|
|
}
|
|
|
|
|
|
@@ -602,8 +657,10 @@ wasi_path_link(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
+ struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_path_link(wasi_ctx->curfds, wasi_ctx->prestats,
|
|
|
+ return wasmtime_ssp_path_link(curfds, prestats,
|
|
|
old_fd, old_flags, old_path, old_path_len,
|
|
|
new_fd, new_path, new_path_len);
|
|
|
}
|
|
|
@@ -621,20 +678,21 @@ wasi_path_open(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_fd_t fd = -1; /* set fd_app -1 if path open failed */
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
if (!validate_native_addr(fd_app, sizeof(wasi_fd_t)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_path_open(wasi_ctx->curfds,
|
|
|
- dirfd, dirflags,
|
|
|
- path, path_len,
|
|
|
- oflags,
|
|
|
- fs_rights_base,
|
|
|
- fs_rights_inheriting,
|
|
|
- fs_flags,
|
|
|
- &fd);
|
|
|
+ err = wasmtime_ssp_path_open(curfds,
|
|
|
+ dirfd, dirflags,
|
|
|
+ path, path_len,
|
|
|
+ oflags,
|
|
|
+ fs_rights_base,
|
|
|
+ fs_rights_inheriting,
|
|
|
+ fs_flags,
|
|
|
+ &fd);
|
|
|
|
|
|
*fd_app = fd;
|
|
|
return err;
|
|
|
@@ -649,13 +707,14 @@ wasi_fd_readdir(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
size_t bufused;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
if (!validate_native_addr(bufused_app, sizeof(uint32)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_fd_readdir(wasi_ctx->curfds, fd,
|
|
|
+ err = wasmtime_ssp_fd_readdir(curfds, fd,
|
|
|
buf, buf_len, cookie, &bufused);
|
|
|
if (err)
|
|
|
return err;
|
|
|
@@ -673,13 +732,14 @@ wasi_path_readlink(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
size_t bufused;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
if (!validate_native_addr(bufused_app, sizeof(uint32)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_path_readlink(wasi_ctx->curfds, fd,
|
|
|
+ err = wasmtime_ssp_path_readlink(curfds, fd,
|
|
|
path, path_len,
|
|
|
buf, buf_len, &bufused);
|
|
|
if (err)
|
|
|
@@ -696,8 +756,9 @@ wasi_path_rename(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_path_rename(wasi_ctx->curfds,
|
|
|
+ return wasmtime_ssp_path_rename(curfds,
|
|
|
old_fd, old_path, old_path_len,
|
|
|
new_fd, new_path, new_path_len);
|
|
|
}
|
|
|
@@ -708,11 +769,12 @@ wasi_fd_filestat_get(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
if (!validate_native_addr(filestat, sizeof(wasi_filestat_t)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- return wasmtime_ssp_fd_filestat_get(wasi_ctx->curfds, fd, filestat);
|
|
|
+ return wasmtime_ssp_fd_filestat_get(curfds, fd, filestat);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -724,8 +786,9 @@ wasi_fd_filestat_set_times(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_filestat_set_times(wasi_ctx->curfds, fd,
|
|
|
+ return wasmtime_ssp_fd_filestat_set_times(curfds, fd,
|
|
|
st_atim, st_mtim, fstflags);
|
|
|
}
|
|
|
|
|
|
@@ -736,8 +799,9 @@ wasi_fd_filestat_set_size(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_fd_filestat_set_size(wasi_ctx->curfds, fd, st_size);
|
|
|
+ return wasmtime_ssp_fd_filestat_set_size(curfds, fd, st_size);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -749,11 +813,12 @@ wasi_path_filestat_get(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
if (!validate_native_addr(filestat, sizeof(wasi_filestat_t)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- return wasmtime_ssp_path_filestat_get(wasi_ctx->curfds, fd,
|
|
|
+ return wasmtime_ssp_path_filestat_get(curfds, fd,
|
|
|
flags, path, path_len, filestat);
|
|
|
}
|
|
|
|
|
|
@@ -768,8 +833,9 @@ wasi_path_filestat_set_times(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_path_filestat_set_times(wasi_ctx->curfds, fd,
|
|
|
+ return wasmtime_ssp_path_filestat_set_times(curfds, fd,
|
|
|
flags, path, path_len,
|
|
|
st_atim, st_mtim, fstflags);
|
|
|
}
|
|
|
@@ -781,8 +847,10 @@ wasi_path_symlink(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
+ struct fd_prestats *prestats = wasi_ctx_get_prestats(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_path_symlink(wasi_ctx->curfds, wasi_ctx->prestats,
|
|
|
+ return wasmtime_ssp_path_symlink(curfds, prestats,
|
|
|
old_path, old_path_len, fd,
|
|
|
new_path, new_path_len);
|
|
|
}
|
|
|
@@ -793,8 +861,9 @@ wasi_path_unlink_file(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_path_unlink_file(wasi_ctx->curfds, fd, path, path_len);
|
|
|
+ return wasmtime_ssp_path_unlink_file(curfds, fd, path, path_len);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -803,8 +872,9 @@ wasi_path_remove_directory(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_path_remove_directory(wasi_ctx->curfds, fd, path, path_len);
|
|
|
+ return wasmtime_ssp_path_remove_directory(curfds, fd, path, path_len);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|
|
|
@@ -814,6 +884,7 @@ wasi_poll_oneoff(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
size_t nevents;
|
|
|
wasi_errno_t err;
|
|
|
|
|
|
@@ -822,7 +893,7 @@ wasi_poll_oneoff(wasm_exec_env_t exec_env,
|
|
|
|| !validate_native_addr(nevents_app, sizeof(uint32)))
|
|
|
return (wasi_errno_t)-1;
|
|
|
|
|
|
- err = wasmtime_ssp_poll_oneoff(wasi_ctx->curfds, in, out,
|
|
|
+ err = wasmtime_ssp_poll_oneoff(curfds, in, out,
|
|
|
nsubscriptions, &nevents);
|
|
|
if (err)
|
|
|
return err;
|
|
|
@@ -864,6 +935,7 @@ wasi_sock_recv(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_iovec_t *iovec, *iovec_begin;
|
|
|
uint64 total_size;
|
|
|
size_t ro_datalen;
|
|
|
@@ -894,7 +966,7 @@ wasi_sock_recv(wasm_exec_env_t exec_env,
|
|
|
iovec->buf_len = ri_data->buf_len;
|
|
|
}
|
|
|
|
|
|
- err = wasmtime_ssp_sock_recv(wasi_ctx->curfds, sock,
|
|
|
+ err = wasmtime_ssp_sock_recv(curfds, sock,
|
|
|
iovec_begin, ri_data_len,
|
|
|
ri_flags, &ro_datalen,
|
|
|
ro_flags);
|
|
|
@@ -920,6 +992,7 @@ wasi_sock_send(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
wasi_ciovec_t *ciovec, *ciovec_begin;
|
|
|
uint64 total_size;
|
|
|
size_t so_datalen;
|
|
|
@@ -949,7 +1022,7 @@ wasi_sock_send(wasm_exec_env_t exec_env,
|
|
|
ciovec->buf_len = si_data->buf_len;
|
|
|
}
|
|
|
|
|
|
- err = wasmtime_ssp_sock_send(wasi_ctx->curfds, sock,
|
|
|
+ err = wasmtime_ssp_sock_send(curfds, sock,
|
|
|
ciovec_begin, si_data_len,
|
|
|
si_flags, &so_datalen);
|
|
|
if (err)
|
|
|
@@ -971,8 +1044,9 @@ wasi_sock_shutdown(wasm_exec_env_t exec_env,
|
|
|
{
|
|
|
wasm_module_inst_t module_inst = get_module_inst(exec_env);
|
|
|
wasi_ctx_t wasi_ctx = get_wasi_ctx(module_inst);
|
|
|
+ struct fd_table *curfds = wasi_ctx_get_curfds(module_inst, wasi_ctx);
|
|
|
|
|
|
- return wasmtime_ssp_sock_shutdown(wasi_ctx->curfds, sock, how);
|
|
|
+ return wasmtime_ssp_sock_shutdown(curfds, sock, how);
|
|
|
}
|
|
|
|
|
|
static wasi_errno_t
|