megalock 0.1.0

X11 xlock replacement
#[macro_export]
macro_rules! free {
    ($s:expr) => {
        #[allow(unused_unsafe)]
        unsafe {
            libc::free($s as *mut std::ffi::c_void)
        }
    };
}

#[macro_export]
macro_rules! const_string_ptr {
    ($s:expr) => {
        std::ffi::CString::from_vec_unchecked($s.as_bytes().to_vec())
            .as_c_str()
            .as_ptr()
            .cast()
    };
}

#[macro_export]
macro_rules! string_from_ptr {
    ($s:expr) => {{
        #[allow(unused_unsafe)]
        unsafe { std::ffi::CStr::from_ptr($s) }.to_str()
    }};
}

#[macro_export]
macro_rules! load_atomic {
    ($s:expr) => {
        $s.load(std::sync::atomic::Ordering::Relaxed)
    };
}

#[macro_export]
macro_rules! store_atomic {
    ($s:expr, $v:expr) => {
        $s.store($v, std::sync::atomic::Ordering::Relaxed)
    };
}

#[macro_export]
macro_rules! replace_option {
    ($s:expr, $v:expr) => {
        $s.lock().unwrap().replace($v)
    };
}

#[macro_export]
macro_rules! clear_password {
    () => {
        crate::wm::statics::PASSWORD.lock().unwrap().truncate(0)
    };
}