binaryninja/ffi.rs
1// Copyright 2021-2025 Vector 35 Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15use std::time::{Duration, SystemTime, UNIX_EPOCH};
16
17macro_rules! ffi_wrap {
18 ($n:expr, $b:expr) => {{
19 use std::panic;
20 use std::process;
21
22 panic::catch_unwind(|| $b).unwrap_or_else(|_| {
23 log::error!("ffi callback caught panic: {}", $n);
24 process::abort()
25 })
26 }};
27}
28
29pub(crate) fn time_from_bn(timestamp: u64) -> SystemTime {
30 let m = Duration::from_secs(timestamp);
31 UNIX_EPOCH + m
32}