wasmer_wasix/syscalls/wasix/
proc_signals_get.rs

1use super::*;
2use crate::syscalls::*;
3
4/// ### `proc_signals_get()`
5/// Gets signals with overridden handlers.
6///
7/// Inputs:
8/// - `__wasi_signal_and_action_t *buf`
9///     A pointer to a buffer to write the signal data.
10#[instrument(level = "trace", skip_all, ret)]
11pub fn proc_signals_get<M: MemorySize>(
12    mut ctx: FunctionEnvMut<'_, WasiEnv>,
13    buf: WasmPtr<SignalDisposition, M>,
14) -> Result<Errno, WasiError> {
15    let env = ctx.data();
16    let (memory, mut state) = unsafe { env.get_memory_and_wasi_state(&ctx, 0) };
17
18    let signals = state.signals.lock().unwrap();
19
20    let buf = wasi_try_mem_ok!(buf.slice(&memory, wasi_try_ok!(to_offset::<M>(signals.len()))));
21
22    for (idx, (sig, act)) in signals.iter().enumerate() {
23        wasi_try_mem_ok!(buf.index(idx as u64).write(SignalDisposition {
24            sig: *sig,
25            disp: *act
26        }));
27    }
28
29    Ok(Errno::Success)
30}