use std::num::NonZeroU32;
use objc2_io_kit::IOObjectRelease;
type IoObject = NonZeroU32;
pub(crate) struct IOReleaser(IoObject);
impl IOReleaser {
pub(crate) fn new(obj: u32) -> Option<Self> {
IoObject::new(obj).map(Self)
}
#[cfg(feature = "disk")]
pub(crate) unsafe fn new_unchecked(obj: u32) -> Self {
debug_assert_ne!(obj, 0);
unsafe { Self(IoObject::new_unchecked(obj)) }
}
#[inline]
pub(crate) fn inner(&self) -> u32 {
self.0.get()
}
}
impl Drop for IOReleaser {
fn drop(&mut self) {
IOObjectRelease(self.0.get() as _);
}
}
#[allow(deprecated)]
#[cfg(target_os = "macos")]
pub(crate) static MAIN_PORT: &libc::mach_port_t = unsafe { &objc2_io_kit::kIOMasterPortDefault };
#[cfg(not(target_os = "macos"))]
pub(crate) static MAIN_PORT: &libc::mach_port_t = unsafe { &objc2_io_kit::kIOMainPortDefault };