mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
..
This commit is contained in:
parent
2ab734a948
commit
52054c916d
2 changed files with 14 additions and 4 deletions
|
|
@ -11,7 +11,7 @@ pub struct CFDict(CFDictionaryRef);
|
|||
impl CFDict {
|
||||
pub fn take(dict: CFDictionaryRef) -> Result<Self> {
|
||||
if dict.is_null() {
|
||||
bail!("Null pointer");
|
||||
bail!("Cannot take a null pointer");
|
||||
}
|
||||
Ok(Self(dict))
|
||||
}
|
||||
|
|
@ -19,7 +19,9 @@ impl CFDict {
|
|||
pub fn value(&self, key: &str) -> Result<*const c_void> {
|
||||
let key_ = CFString::new(key)?;
|
||||
let mut value = std::ptr::null();
|
||||
if unsafe { CFDictionaryGetValueIfPresent(self.0, key_.as_void_ptr(), &mut value) } == 0 {
|
||||
if unsafe { CFDictionaryGetValueIfPresent(self.0, key_.as_void_ptr(), &mut value) } == 0
|
||||
|| value.is_null()
|
||||
{
|
||||
bail!("Cannot get the value for the key `{key}`");
|
||||
}
|
||||
Ok(value)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,10 @@ impl Partitions {
|
|||
{
|
||||
tokio::task::spawn_blocking(move || {
|
||||
let session = unsafe { DASessionCreate(kCFAllocatorDefault) };
|
||||
if session.is_null() {
|
||||
return error!("Cannot create a disk arbitration session");
|
||||
}
|
||||
defer! { unsafe { CFRelease(session) } };
|
||||
|
||||
extern "C" fn on_appeared(_disk: *const c_void, context: *mut c_void) {
|
||||
let boxed = context as *mut Box<dyn Fn()>;
|
||||
|
|
@ -85,6 +89,10 @@ impl Partitions {
|
|||
|
||||
fn all_partitions(names: Vec<CString>) -> Result<Vec<Partition>> {
|
||||
let session = unsafe { DASessionCreate(kCFAllocatorDefault) };
|
||||
if session.is_null() {
|
||||
bail!("Cannot create a disk arbitration session");
|
||||
}
|
||||
defer! { unsafe { CFRelease(session) } };
|
||||
|
||||
let mut disks = Vec::with_capacity(names.len());
|
||||
for name in names {
|
||||
|
|
@ -93,7 +101,7 @@ impl Partitions {
|
|||
continue;
|
||||
}
|
||||
|
||||
defer! { unsafe { CFRelease(disk as _) } };
|
||||
defer! { unsafe { CFRelease(disk) } };
|
||||
let Ok(dict) = CFDict::take(unsafe { DADiskCopyDescription(disk) }) else {
|
||||
continue;
|
||||
};
|
||||
|
|
@ -120,7 +128,7 @@ impl Partitions {
|
|||
};
|
||||
|
||||
if result != 0 {
|
||||
bail!("IOServiceGetMatchingServices failed");
|
||||
bail!("Cannot get the IO matching services");
|
||||
}
|
||||
defer! { unsafe { IOObjectRelease(iterator); } };
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue