use crate::symbolize::{dladdr, ResolveWhat, SymbolName};
use crate::types::BytesOrWideString;
use core::ffi::c_void;
pub struct Symbol<'a>(dladdr::Symbol<'a>);
impl Symbol<'_> {
pub fn name(&self) -> Option<SymbolName> {
self.0.name()
}
pub fn addr(&self) -> Option<*mut c_void> {
self.0.addr()
}
pub fn filename_raw(&self) -> Option<BytesOrWideString> {
self.0.filename_raw()
}
#[cfg(feature = "std")]
pub fn filename(&self) -> Option<&::std::path::Path> {
self.0.filename()
}
pub fn lineno(&self) -> Option<u32> {
self.0.lineno()
}
}
pub unsafe fn resolve(what: ResolveWhat, cb: &mut FnMut(&super::Symbol)) {
dladdr::resolve(what.address_or_ip(), &mut |sym| {
cb(&super::Symbol { inner: Symbol(sym) })
});
}