mirror of
https://github.com/torvalds/linux.git
synced 2025-11-02 17:49:03 +02:00
rust: types: avoid as casts
Replace `as` casts with `cast{,_mut}` calls which are a bit safer.
In one instance, remove an unnecessary `as` cast without replacement.
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
Signed-off-by: Tamir Duberstein <tamird@gmail.com>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Link: https://lore.kernel.org/r/20241120-borrow-mut-v6-2-80dbadd00951@gmail.com
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
parent
c6340da3d2
commit
aa991a2a81
3 changed files with 10 additions and 9 deletions
|
|
@ -356,13 +356,13 @@ impl<T: 'static, A> ForeignOwnable for Box<T, A>
|
|||
type Borrowed<'a> = &'a T;
|
||||
|
||||
fn into_foreign(self) -> *const crate::ffi::c_void {
|
||||
Box::into_raw(self) as _
|
||||
Box::into_raw(self).cast()
|
||||
}
|
||||
|
||||
unsafe fn from_foreign(ptr: *const crate::ffi::c_void) -> Self {
|
||||
// SAFETY: The safety requirements of this function ensure that `ptr` comes from a previous
|
||||
// call to `Self::into_foreign`.
|
||||
unsafe { Box::from_raw(ptr as _) }
|
||||
unsafe { Box::from_raw(ptr.cast_mut().cast()) }
|
||||
}
|
||||
|
||||
unsafe fn borrow<'a>(ptr: *const crate::ffi::c_void) -> &'a T {
|
||||
|
|
@ -380,13 +380,13 @@ impl<T: 'static, A> ForeignOwnable for Pin<Box<T, A>>
|
|||
|
||||
fn into_foreign(self) -> *const crate::ffi::c_void {
|
||||
// SAFETY: We are still treating the box as pinned.
|
||||
Box::into_raw(unsafe { Pin::into_inner_unchecked(self) }) as _
|
||||
Box::into_raw(unsafe { Pin::into_inner_unchecked(self) }).cast()
|
||||
}
|
||||
|
||||
unsafe fn from_foreign(ptr: *const crate::ffi::c_void) -> Self {
|
||||
// SAFETY: The safety requirements of this function ensure that `ptr` comes from a previous
|
||||
// call to `Self::into_foreign`.
|
||||
unsafe { Pin::new_unchecked(Box::from_raw(ptr as _)) }
|
||||
unsafe { Pin::new_unchecked(Box::from_raw(ptr.cast_mut().cast())) }
|
||||
}
|
||||
|
||||
unsafe fn borrow<'a>(ptr: *const crate::ffi::c_void) -> Pin<&'a T> {
|
||||
|
|
|
|||
|
|
@ -213,10 +213,11 @@ pub fn new(contents: T, flags: Flags) -> Result<Self, AllocError> {
|
|||
};
|
||||
|
||||
let inner = KBox::new(value, flags)?;
|
||||
let inner = KBox::leak(inner).into();
|
||||
|
||||
// SAFETY: We just created `inner` with a reference count of 1, which is owned by the new
|
||||
// `Arc` object.
|
||||
Ok(unsafe { Self::from_inner(KBox::leak(inner).into()) })
|
||||
Ok(unsafe { Self::from_inner(inner) })
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -345,13 +346,13 @@ impl<T: 'static> ForeignOwnable for Arc<T> {
|
|||
type Borrowed<'a> = ArcBorrow<'a, T>;
|
||||
|
||||
fn into_foreign(self) -> *const crate::ffi::c_void {
|
||||
ManuallyDrop::new(self).ptr.as_ptr() as _
|
||||
ManuallyDrop::new(self).ptr.as_ptr().cast()
|
||||
}
|
||||
|
||||
unsafe fn borrow<'a>(ptr: *const crate::ffi::c_void) -> ArcBorrow<'a, T> {
|
||||
// SAFETY: The safety requirements of this function ensure that `ptr` comes from a previous
|
||||
// call to `Self::into_foreign`.
|
||||
let inner = unsafe { NonNull::new_unchecked(ptr as *mut ArcInner<T>) };
|
||||
let inner = unsafe { NonNull::new_unchecked(ptr.cast_mut().cast::<ArcInner<T>>()) };
|
||||
|
||||
// SAFETY: The safety requirements of `from_foreign` ensure that the object remains alive
|
||||
// for the lifetime of the returned value.
|
||||
|
|
@ -361,7 +362,7 @@ unsafe fn borrow<'a>(ptr: *const crate::ffi::c_void) -> ArcBorrow<'a, T> {
|
|||
unsafe fn from_foreign(ptr: *const crate::ffi::c_void) -> Self {
|
||||
// SAFETY: The safety requirements of this function ensure that `ptr` comes from a previous
|
||||
// call to `Self::into_foreign`.
|
||||
let inner = unsafe { NonNull::new_unchecked(ptr as *mut ArcInner<T>) };
|
||||
let inner = unsafe { NonNull::new_unchecked(ptr.cast_mut().cast::<ArcInner<T>>()) };
|
||||
|
||||
// SAFETY: By the safety requirement of this function, we know that `ptr` came from
|
||||
// a previous call to `Arc::into_foreign`, which guarantees that `ptr` is valid and
|
||||
|
|
|
|||
|
|
@ -434,7 +434,7 @@ pub unsafe fn from_raw(ptr: NonNull<T>) -> Self {
|
|||
/// }
|
||||
///
|
||||
/// let mut data = Empty {};
|
||||
/// let ptr = NonNull::<Empty>::new(&mut data as *mut _).unwrap();
|
||||
/// let ptr = NonNull::<Empty>::new(&mut data).unwrap();
|
||||
/// # // SAFETY: TODO.
|
||||
/// let data_ref: ARef<Empty> = unsafe { ARef::from_raw(ptr) };
|
||||
/// let raw_ptr: NonNull<Empty> = ARef::into_raw(data_ref);
|
||||
|
|
|
|||
Loading…
Reference in a new issue