From 4e4c2eafaec12fd22bbeaa9b24f5f2bd893252ad Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Fri, 2 Sep 2022 20:10:08 +0200 Subject: [PATCH] Enable `deny(unsafe_op_in_unsafe_fn)` in macOS backend --- src/platform_impl/ios/app_state.rs | 2 +- src/platform_impl/macos/appkit/mod.rs | 1 - src/platform_impl/macos/mod.rs | 3 +-- src/platform_impl/macos/observer.rs | 24 +++++++++++++----------- src/platform_impl/macos/util/async.rs | 7 +++++-- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/platform_impl/ios/app_state.rs b/src/platform_impl/ios/app_state.rs index ed8fc36e48..2993f38560 100644 --- a/src/platform_impl/ios/app_state.rs +++ b/src/platform_impl/ios/app_state.rs @@ -144,7 +144,7 @@ impl AppState { #[inline(never)] #[cold] unsafe fn init_guard(guard: &mut RefMut<'static, Option>) { - let waker = EventLoopWaker::new(CFRunLoopGetMain()); + let waker = EventLoopWaker::new(unsafe { CFRunLoopGetMain() }); **guard = Some(AppState { app_state: Some(AppStateImpl::NotLaunched { queued_windows: Vec::new(), diff --git a/src/platform_impl/macos/appkit/mod.rs b/src/platform_impl/macos/appkit/mod.rs index 3af390ffe9..fad620e5de 100644 --- a/src/platform_impl/macos/appkit/mod.rs +++ b/src/platform_impl/macos/appkit/mod.rs @@ -1,4 +1,3 @@ -#![deny(unsafe_op_in_unsafe_fn)] // Objective-C methods have different conventions, and it's much easier to // understand if we just use the same names #![allow(non_snake_case)] diff --git a/src/platform_impl/macos/mod.rs b/src/platform_impl/macos/mod.rs index eb59ede58a..2ffa4f88b6 100644 --- a/src/platform_impl/macos/mod.rs +++ b/src/platform_impl/macos/mod.rs @@ -1,5 +1,4 @@ -#![cfg(target_os = "macos")] -#![allow(clippy::let_unit_value)] +#![deny(unsafe_op_in_unsafe_fn)] #[macro_use] mod util; diff --git a/src/platform_impl/macos/observer.rs b/src/platform_impl/macos/observer.rs index 2ced84ef5f..a51a9d1014 100644 --- a/src/platform_impl/macos/observer.rs +++ b/src/platform_impl/macos/observer.rs @@ -130,7 +130,7 @@ unsafe fn control_flow_handler(panic_info: *mut c_void, f: F) where F: FnOnce(Weak) + UnwindSafe, { - let info_from_raw = Weak::from_raw(panic_info as *mut PanicInfo); + let info_from_raw = unsafe { Weak::from_raw(panic_info as *mut PanicInfo) }; // Asserting unwind safety on this type should be fine because `PanicInfo` is // `RefUnwindSafe` and `Rc` is `UnwindSafe` if `T` is `RefUnwindSafe`. let panic_info = AssertUnwindSafe(Weak::clone(&info_from_raw)); @@ -195,7 +195,7 @@ struct RunLoop(CFRunLoopRef); impl RunLoop { unsafe fn get() -> Self { - RunLoop(CFRunLoopGetMain()) + RunLoop(unsafe { CFRunLoopGetMain() }) } unsafe fn add_observer( @@ -205,15 +205,17 @@ impl RunLoop { handler: CFRunLoopObserverCallBack, context: *mut CFRunLoopObserverContext, ) { - let observer = CFRunLoopObserverCreate( - ptr::null_mut(), - flags, - ffi::TRUE, // Indicates we want this to run repeatedly - priority, // The lower the value, the sooner this will run - handler, - context, - ); - CFRunLoopAddObserver(self.0, observer, kCFRunLoopCommonModes); + let observer = unsafe { + CFRunLoopObserverCreate( + ptr::null_mut(), + flags, + ffi::TRUE, // Indicates we want this to run repeatedly + priority, // The lower the value, the sooner this will run + handler, + context, + ) + }; + unsafe { CFRunLoopAddObserver(self.0, observer, kCFRunLoopCommonModes) }; } } diff --git a/src/platform_impl/macos/util/async.rs b/src/platform_impl/macos/util/async.rs index d8ceba791b..59f8e2ed54 100644 --- a/src/platform_impl/macos/util/async.rs +++ b/src/platform_impl/macos/util/async.rs @@ -131,8 +131,11 @@ pub(crate) fn toggle_full_screen_async( pub(crate) unsafe fn restore_display_mode_async(ns_screen: u32) { Queue::main().exec_async(move || { - ffi::CGRestorePermanentDisplayConfiguration(); - assert_eq!(ffi::CGDisplayRelease(ns_screen), ffi::kCGErrorSuccess); + unsafe { ffi::CGRestorePermanentDisplayConfiguration() }; + assert_eq!( + unsafe { ffi::CGDisplayRelease(ns_screen) }, + ffi::kCGErrorSuccess + ); }); }