@@ -94,7 +94,7 @@ pub(crate) mod ffi {
9494 #[ unsafe( no_mangle) ]
9595 pub unsafe extern "C" fn slint_callback_init ( out : * mut CallbackOpaque ) {
9696 assert_eq ! ( core:: mem:: size_of:: <CallbackOpaque >( ) , core:: mem:: size_of:: <Callback <( ) >>( ) ) ;
97- core:: ptr:: write ( out as * mut Callback < ( ) > , Default :: default ( ) ) ;
97+ unsafe { core:: ptr:: write ( out as * mut Callback < ( ) > , Default :: default ( ) ) } ;
9898 }
9999
100100 /// Emit the callback
@@ -104,11 +104,13 @@ pub(crate) mod ffi {
104104 arg : * const c_void ,
105105 ret : * mut c_void ,
106106 ) {
107- let sig = & * ( sig as * const Callback < c_void > ) ;
108- if let Some ( mut h) = sig. handler . take ( ) {
109- h ( & * arg, & mut * ret) ;
110- assert ! ( sig. handler. take( ) . is_none( ) , "Callback Handler set while called" ) ;
111- sig. handler . set ( Some ( h) ) ;
107+ unsafe {
108+ let sig = & * ( sig as * const Callback < c_void > ) ;
109+ if let Some ( mut h) = sig. handler . take ( ) {
110+ h ( & * arg, & mut * ret) ;
111+ assert ! ( sig. handler. take( ) . is_none( ) , "Callback Handler set while called" ) ;
112+ sig. handler . set ( Some ( h) ) ;
113+ }
112114 }
113115 }
114116
@@ -122,38 +124,41 @@ pub(crate) mod ffi {
122124 user_data : * mut c_void ,
123125 drop_user_data : Option < extern "C" fn ( * mut c_void ) > ,
124126 ) {
125- let sig = & mut * ( sig as * mut Callback < c_void > ) ;
126-
127- struct UserData {
128- user_data : * mut c_void ,
129- drop_user_data : Option < extern "C" fn ( * mut c_void ) > ,
130- binding : extern "C" fn ( user_data : * mut c_void , arg : * const c_void , ret : * mut c_void ) ,
131- }
127+ unsafe {
128+ let sig = & mut * ( sig as * mut Callback < c_void > ) ;
129+
130+ struct UserData {
131+ user_data : * mut c_void ,
132+ drop_user_data : Option < extern "C" fn ( * mut c_void ) > ,
133+ binding :
134+ extern "C" fn ( user_data : * mut c_void , arg : * const c_void , ret : * mut c_void ) ,
135+ }
132136
133- impl Drop for UserData {
134- fn drop ( & mut self ) {
135- if let Some ( x) = self . drop_user_data {
136- x ( self . user_data )
137+ impl Drop for UserData {
138+ fn drop ( & mut self ) {
139+ if let Some ( x) = self . drop_user_data {
140+ x ( self . user_data )
141+ }
137142 }
138143 }
139- }
140144
141- impl UserData {
142- /// Safety: the arguments must be valid pointers
143- unsafe fn call ( & self , arg : * const c_void , ret : * mut c_void ) {
144- ( self . binding ) ( self . user_data , arg, ret)
145+ impl UserData {
146+ /// Safety: the arguments must be valid pointers
147+ unsafe fn call ( & self , arg : * const c_void , ret : * mut c_void ) {
148+ ( self . binding ) ( self . user_data , arg, ret)
149+ }
145150 }
146- }
147151
148- let ud = UserData { user_data, drop_user_data, binding } ;
149- sig. handler . set ( Some ( Box :: new ( move |a : & ( ) , r : & mut ( ) | {
150- ud. call ( a as * const c_void , r as * mut c_void )
151- } ) ) ) ;
152+ let ud = UserData { user_data, drop_user_data, binding } ;
153+ sig. handler . set ( Some ( Box :: new ( move |a : & ( ) , r : & mut ( ) | {
154+ ud. call ( a as * const c_void , r as * mut c_void )
155+ } ) ) ) ;
156+ }
152157 }
153158
154159 /// Destroy callback
155160 #[ unsafe( no_mangle) ]
156161 pub unsafe extern "C" fn slint_callback_drop ( handle : * mut CallbackOpaque ) {
157- core:: ptr:: drop_in_place ( handle as * mut Callback < ( ) > ) ;
162+ unsafe { core:: ptr:: drop_in_place ( handle as * mut Callback < ( ) > ) } ;
158163 }
159164}
0 commit comments