pub mod auth;
#[allow(clippy::module_inception)]
mod lockscreen;
mod pin_setup;
#[cfg(unix)]
pub mod signal_sender;
pub use lockscreen::LockScreen;
pub use pin_setup::{PinSetupDialog, PinSetupState};
#[cfg(unix)]
pub mod signal_handler {
use std::sync::atomic::{AtomicBool, Ordering};
pub static LOCK_REQUESTED: AtomicBool = AtomicBool::new(false);
pub fn setup() {
unsafe {
libc::signal(
libc::SIGUSR1,
handle_sigusr1 as *const () as libc::sighandler_t,
);
}
}
extern "C" fn handle_sigusr1(_: libc::c_int) {
LOCK_REQUESTED.store(true, Ordering::SeqCst);
}
pub fn check_and_clear() -> bool {
LOCK_REQUESTED.swap(false, Ordering::SeqCst)
}
}
#[cfg(not(unix))]
pub mod signal_handler {
pub fn setup() {}
pub fn check_and_clear() -> bool {
false
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_signal_handler_setup() {
signal_handler::setup();
}
#[test]
fn test_signal_handler_check_and_clear() {
assert!(!signal_handler::check_and_clear());
}
}