> -unsafe extern "C" fn rust_realize_fn<T: DeviceImpl>(dev: *mut DeviceState, > _errp: *mut *mut Error) { > +unsafe extern "C" fn rust_realize_fn<T: DeviceImpl>( > + dev: *mut bindings::DeviceState, > + _errp: *mut *mut Error, > +) { > let state = NonNull::new(dev).unwrap().cast::<T>(); > T::REALIZE.unwrap()(unsafe { state.as_ref() }); > } > @@ -251,7 +270,7 @@ fn init_clock_in<F: for<'a> FnCall<(&'a Self::Target, > ClockEvent)>>( > events: ClockEvent, > ) -> Owned<Clock> { > fn do_init_clock_in( > - dev: *mut DeviceState, > + dev: &DeviceState, > name: &str, > cb: Option<unsafe extern "C" fn(*mut c_void, ClockEvent)>, > events: ClockEvent, > @@ -265,14 +284,15 @@ fn do_init_clock_in( > unsafe { > let cstr = CString::new(name).unwrap(); > let clk = bindings::qdev_init_clock_in( > - dev, > + dev.0.as_mut_ptr(),
This can be simplfied as dev.as_mut_ptr(). > cstr.as_ptr(), > cb, > - dev.cast::<c_void>(), > + dev.0.as_void_ptr(), If Wrapper provides as_void_ptr(), then this can also be simplified. > events.0, > ); > > - Owned::from(&*clk) > + let clk: &Clock = Clock::from_raw(clk); > + Owned::from(clk) > } > } LGTM, Reviewed-by: Zhao Liu <zhao1....@intel.com>