wasmer_wasix/syscalls/wasix/
proc_signals_sizes_get.rs

1use super::*;
2use crate::syscalls::*;
3
4/// ### `proc_signals_count_get()`
5/// Gets the number of signals with overridden handlers.
6///
7/// Outputs:
8/// - `size_t *signal_count`
9///     The number of signals.
10#[instrument(level = "trace", skip_all, fields(signal_count = field::Empty), ret)]
11pub fn proc_signals_sizes_get<M: MemorySize>(
12    mut ctx: FunctionEnvMut<'_, WasiEnv>,
13    signal_count: WasmPtr<M::Offset, 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 signal_count = signal_count.deref(&memory);
19
20    let count_val: M::Offset = wasi_try_ok!(
21        state
22            .signals
23            .lock()
24            .unwrap()
25            .len()
26            .try_into()
27            .map_err(|_| Errno::Overflow)
28    );
29    wasi_try_mem_ok!(signal_count.write(count_val));
30
31    Span::current().record("signal_count", u64::try_from(count_val).unwrap());
32
33    Ok(Errno::Success)
34}