use std::io;
extern "C" {
fn signal(signum: i32, handler: *const ()) -> *const ();
}
pub(super) unsafe fn install(handler: extern "C" fn(i32)) -> io::Result<()> {
const SIGINT: i32 = 2;
const SIGTERM: i32 = 15;
let sig_err: *const () = (-1isize) as usize as *const ();
let prev = unsafe { signal(SIGINT, handler as *const ()) };
if prev == sig_err {
return Err(io::Error::last_os_error());
}
let prev = unsafe { signal(SIGTERM, handler as *const ()) };
if prev == sig_err {
return Err(io::Error::last_os_error());
}
Ok(())
}