diff --git a/src/tz_macos.rs b/src/tz_macos.rs index a42c00a..bcbadc2 100644 --- a/src/tz_macos.rs +++ b/src/tz_macos.rs @@ -3,20 +3,21 @@ use core_foundation_sys::string::{kCFStringEncodingUTF8, CFStringGetCStringPtr}; use core_foundation_sys::timezone::{CFTimeZoneCopySystem, CFTimeZoneGetName}; pub(crate) fn get_timezone_inner() -> Result { - unsafe { - Dropping::new(CFTimeZoneCopySystem()) - .and_then(|tz| Dropping::new(CFTimeZoneGetName(tz.0))) - .and_then(|name| { - let name = CFStringGetCStringPtr(name.0, kCFStringEncodingUTF8); - if name.is_null() { - None - } else { - Some(name) + pub(crate) fn get_timezone_inner() -> Result { + unsafe { + if let Some(tz) = Dropping::new(CFTimeZoneCopySystem()) { + if let Some(name) = Dropping::new(CFTimeZoneGetName(tz.0)) { + let name = CFStringGetCStringPtr(name.0, kCFStringEncodingUTF8); + if !name.is_null() { + let name = std::ffi::CStr::from_ptr(name); + if let Ok(name) = name.to_str() { + return Ok(name.to_owned()); + } + } } - }) - .and_then(|name| std::ffi::CStr::from_ptr(name).to_str().ok()) - .map(|name| name.to_owned()) - .ok_or(crate::GetTimezoneError::OsError) + } + } + Err(crate::GetTimezoneError::OsError) } }