You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
818 B

4 years ago
#![allow(unused_macros)]
pub const GENERIC_ERROR: i32 = -1;
pub const GENERIC_SUCCESS: i32 = 0;
macro_rules! c_try {
($e:expr) => {
match $e {
Ok(v) => v,
Err(e) => return i32::from(e),
}
}
}
macro_rules! no_unwind {
(try $t:expr; $($e:tt)*) => {
{
match std::panic::catch_unwind(|| {
$($e)*
}) {
Ok(v) => i32::from(v),
Err(_) => return i32::from($t),
}
}
};
($($e:tt)*) => {
no_unwind! {try $crate::ffi::GENERIC_ERROR; $($e)*}
}
}
macro_rules! string_from_ffi {
($file:expr) => {
unsafe {
let file = $file;
if file.is_null() {
return $crate::ffi::GENERIC_ERROR;
}
let file = CStr::from_ptr(file);
match file.to_str() {
Ok(file) => file.to_owned(),
Err(_) => return $crate::ffi::GENERIC_ERROR,
}
}
}
}