1use crate::invoke::InvokeFunction;
2use crate::malloc::alloc;
3
4#[link(wasm_import_module = "w3")]
5extern "C" {
6 #[link_name = "__w3_load_env"]
8 pub fn __w3_load_env(environment_ptr: u32);
9
10 #[link_name = "__w3_sanitize_env_args"]
12 pub fn __w3_sanitize_env_args(args_ptr: u32);
13
14 #[link_name = "__w3_sanitize_env_result"]
16 pub fn __w3_sanitize_env_result(ptr: u32, len: u32);
17}
18
19pub fn w3_load_env(env_size: u32) -> Vec<u8> {
20 let env_size_ptr = alloc(env_size as usize);
21 let env_buf =
22 unsafe { Vec::from_raw_parts(env_size_ptr, env_size as usize, env_size as usize) };
23 unsafe { __w3_load_env(env_buf.as_ptr() as u32) };
24 env_buf
25}
26
27pub fn w3_sanitize_env(args_size: u32, func: InvokeFunction) {
28 let args_size_ptr = alloc(args_size as usize);
29 let args_buf =
30 unsafe { Vec::from_raw_parts(args_size_ptr, args_size as usize, args_size as usize) };
31 unsafe { __w3_sanitize_env_args(args_buf.as_ptr() as u32) };
32 let result = func(&args_buf);
33 let result_len = result.len() as u32;
34 unsafe { __w3_sanitize_env_result(result.as_ptr() as u32, result_len) };
35}