use std::ffi::CStr;
macro_rules! fn_string_with_buffer {
( $fn_call:ident, $l:ident ) => {{
let mut tmp = Vec::with_capacity($l);
unsafe {
let ptr = capi::$fn_call(tmp.as_mut_ptr(), $l);
match ptr.is_null() {
true => None,
false => Some(CStr::from_ptr(tmp.as_mut_ptr()).to_string_lossy().into_owned()),
}
}
}};
}
pub fn get_user_name(l: usize) -> Option<String> {
fn_string_with_buffer!(pa_get_user_name, l)
}
pub fn get_host_name(l: usize) -> Option<String> {
fn_string_with_buffer!(pa_get_host_name, l)
}
pub fn get_fqdn(l: usize) -> Option<String> {
fn_string_with_buffer!(pa_get_fqdn, l)
}
pub fn get_home_dir(l: usize) -> Option<String> {
fn_string_with_buffer!(pa_get_home_dir, l)
}
pub fn get_binary_name(l: usize) -> Option<String> {
fn_string_with_buffer!(pa_get_binary_name, l)
}
#[cfg(any(doc, feature = "pa_v13"))]
#[cfg_attr(docsrs, doc(cfg(feature = "pa_v13")))]
pub fn make_thread_realtime(rtprio: i32) -> Result<(), ()> {
match unsafe { capi::pa_thread_make_realtime(rtprio) } {
0 => Ok(()),
_ => Err(()),
}
}