wasmer_wasix/syscalls/wasix/
proc_parent.rs

1use super::*;
2use crate::syscalls::*;
3
4/// ### `proc_parent()`
5/// Returns the parent handle of the supplied process
6#[instrument(level = "trace", skip_all, fields(%pid, parent = field::Empty), ret)]
7pub fn proc_parent<M: MemorySize>(
8    ctx: FunctionEnvMut<'_, WasiEnv>,
9    pid: Pid,
10    ret_parent: WasmPtr<Pid, M>,
11) -> Errno {
12    let env = ctx.data();
13    let pid: WasiProcessId = pid.into();
14    if pid == env.process.pid() {
15        let memory = unsafe { env.memory_view(&ctx) };
16        Span::current().record("parent", env.process.ppid().raw());
17        wasi_try_mem!(ret_parent.write(&memory, env.process.ppid().raw() as Pid));
18        Errno::Success
19    } else if let Some(process) = env.control_plane.get_process(pid) {
20        let memory = unsafe { env.memory_view(&ctx) };
21        Span::current().record("parent", process.pid().raw());
22        wasi_try_mem!(ret_parent.write(&memory, process.pid().raw() as Pid));
23        Errno::Success
24    } else {
25        Errno::Badf
26    }
27}