gstreamer: Use a reference to a pointer of correct mutability for from_glib_ptr_borrow()

This hopefully makes it easier to use and harder to get the returned
lifetime wrong.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer-rs/-/merge_requests/1436>
This commit is contained in:
Sebastian Dröge 2024-04-30 15:21:49 +03:00
parent 238768f525
commit fe1fe5b114

View file

@ -30,10 +30,12 @@ macro_rules! mini_object_wrapper (
impl $name { impl $name {
#[inline] #[inline]
pub unsafe fn from_glib_ptr_borrow<'a>( pub unsafe fn from_glib_ptr_borrow(
ptr: *const *const $ffi_name, ptr: &*mut $ffi_name,
) -> &'a Self { ) -> &Self {
&*(ptr as *const $name) debug_assert_eq!(std::mem::size_of::<$name>(), std::mem::size_of::<$crate::glib::ffi::gpointer>());
debug_assert!(!ptr.is_null());
&*(ptr as *const *mut $ffi_name as *const $name)
} }
#[inline] #[inline]
@ -548,11 +550,8 @@ macro_rules! mini_object_wrapper (
#[inline] #[inline]
unsafe fn from_value(value: &'a $crate::glib::Value) -> Self { unsafe fn from_value(value: &'a $crate::glib::Value) -> Self {
skip_assert_initialized!(); skip_assert_initialized!();
assert_eq!(std::mem::size_of::<$name>(), std::mem::size_of::<$crate::glib::ffi::gpointer>());
let value = &*(value as *const $crate::glib::Value as *const $crate::glib::gobject_ffi::GValue); let value = &*(value as *const $crate::glib::Value as *const $crate::glib::gobject_ffi::GValue);
let ptr = &value.data[0].v_pointer as *const $crate::glib::ffi::gpointer as *const *const $ffi_name; $name::from_glib_ptr_borrow(&*(&value.data[0].v_pointer as *const $crate::glib::ffi::gpointer as *const *mut $ffi_name))
debug_assert!(!(*ptr).is_null());
&*(ptr as *const $name)
} }
} }