MCPcopy Create free account
hub / github.com/PLSysSec/wave / create_ctx

Function create_ctx

src/wasm2c_frontend.rs:33–83  ·  view source on GitHub ↗
(
    memptr: *mut u8,
    homedir: &str,
    mut arg_buffer: Vec<u8>,
    argc: usize,
    mut env_buffer: Vec<u8>,
    envc: usize,
    netlist: Netlist,
)

Source from the content-addressed store, hash-verified

31trace::init_depth_var!();
32
33pub fn create_ctx(
34 memptr: *mut u8,
35 homedir: &str,
36 mut arg_buffer: Vec<u8>,
37 argc: usize,
38 mut env_buffer: Vec<u8>,
39 envc: usize,
40 netlist: Netlist,
41) -> VmCtx {
42 let memlen = LINEAR_MEM_SIZE;
43 let mut fdmap = FdMap::new();
44 fdmap.init_std_fds();
45 let homedir_file = std::fs::File::open(homedir).unwrap();
46 let homedir_host_fd = homedir_file.as_raw_fd() as usize;
47 if homedir_host_fd >= 0 {
48 fdmap.create(HostFd::from_raw(homedir_host_fd));
49 }
50 // Need to forget file to make sure it does not get auto-closed
51 // when it gets out of scope
52 std::mem::forget(homedir_file);
53 // replace all space with null.
54 // This makes it easy to return the arg_buffer later
55 for i in 0..arg_buffer.len() {
56 if arg_buffer[i] == b' ' {
57 arg_buffer[i] = b'\0';
58 }
59 }
60
61 // replace all space with null.
62 // This makes it easy to return the env_buffer later
63 for i in 0..env_buffer.len() {
64 if env_buffer[i] == b' ' {
65 env_buffer[i] = b'\0';
66 }
67 }
68
69 let mem = ffi_load_vec(memptr, memlen);
70
71 VmCtx {
72 mem,
73 memlen,
74 fdmap,
75 homedir: homedir.to_owned(),
76 homedir_host_fd: HostFd::from_raw(homedir_host_fd),
77 arg_buffer,
78 argc,
79 env_buffer,
80 envc,
81 netlist,
82 }
83}
84
85/// Used for FFI. (wasm2c frontend)
86/// Initialize a vmctx with a memory that points to memptr

Callers 2

ctx_from_memptrFunction · 0.85
setupFunction · 0.85

Calls 4

ffi_load_vecFunction · 0.85
init_std_fdsMethod · 0.80
createMethod · 0.80
lenMethod · 0.45

Tested by

no test coverage detected