Inicializando sigset_t en Rust

Estoy tratando de aprender más sobre el FFI en Rust y vincularme con las bibliotecas C (específicamentelibc) Durante mi "búsqueda" me encontré con el siguiente problema.

Patrón normal en C
void(* sig_set(int sig, void(*handler)(int))) {
    // uninitialized sigaction structs
    struct sigaction new_action, old_action;

    // assign options to new action
    new_action.sa_flags = SA_RESTART;
    new_action.sa_handler = handler;
    sigemptyset(&new_action.sa_mask);

    if(sigaction(sig, &new_action, &old_action) < 0) {
        fprintf(stderr, "Error: %s!\n", "signal error");
        exit(1);
    }
    return old_action.sa_handler;
}
Intento de herrumbre
fn sig_init(sig: i32, handler: fn(i32)->()) -> usize {
    unsafe {
        let mut new_action: libc::sigaction;
        let mut old_action: libc::sigaction;

        new_action.sa_flags = 0x10000000;
        new_action.sa_sigaction = handler as usize;
        libc::sigemptyset(&mut new_action.sa_mask as *mut libc::sigset_t);

        libc::sigaction(
            sig,
            &mut new_action as *mut libc::sigaction,
            &mut old_action as *mu,t libc::sigaction
            );
         old_action.sa_sigaction
    }
}

Cuando probé lo anterior, el compilador arrojará el siguiente error para el uso de una variable posiblemente no inicializada.

error: use of possibly uninitialized variable: `<variable here>` [E0381]

Esto tiene sentido ya que podrían pasar cosas muy malas sisigemptyset&nbsp;debían leer desa_mask. Así que probé lo siguiente en la línea 3 de lo anterior.

let mut new_action: libc::sigaction = libc::sigaction{
    sa_sigaction: handler as usize,
    sa_flags: 0x10000000,
    sa_mask: mask,
};

Esto no funcionará como_restorer&nbsp;falta en el ejemplo anterior, pero_restorer&nbsp;es privado. Entonces, ¿cómo se solucionaría este problema o una situación similar? ¿Usarías algo comomem::transmute?