use std::{
os::raw::{c_char, c_int, c_void},
ptr,
};
use crate::{consts::vals::CryptLogLevel, err::LibcryptErr};
type LoggingCallback = unsafe extern "C" fn(level: c_int, msg: *const c_char, usrptr: *mut c_void);
pub fn log(level: CryptLogLevel, msg: &str) -> Result<(), LibcryptErr> {
let msg_cstring = to_cstring!(msg)?;
mutex!(libcryptsetup_rs_sys::crypt_log(
ptr::null_mut(),
level as c_int,
msg_cstring.as_ptr(),
));
Ok(())
}
pub fn set_log_callback<T>(callback: Option<LoggingCallback>, usrdata: Option<&mut T>) {
mutex!(libcryptsetup_rs_sys::crypt_set_log_callback(
ptr::null_mut(),
callback,
match usrdata {
Some(ud) => (ud as *mut T).cast::<c_void>(),
None => ptr::null_mut(),
},
))
}