summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Schrefl <chrisi.schrefl@gmail.com>2025-04-21 22:18:06 +0000
committerBenno Lossin <benno.lossin@proton.me>2025-05-01 18:13:56 +0200
commitb862aac8fd46601fa20226c9f5d6c6d308678b4d (patch)
tree583de3eec0aa42ea5664e823dd961afd53e4f850
parent2f7c73825f8f435ebdfb2cfa3b01cfa2b1c79041 (diff)
rust: pin-init: Implement `Wrapper` for `UnsafePinned` behind feature flag.
Add the `unsafe-pinned` feature which gates the `Wrapper` implementation of the `core::pin::UnsafePinned` struct. For now this is just a cargo feature, but once `core::pin::UnsafePinned` is stable a config flag can be added to allow the usage of this implementation in the linux kernel. Signed-off-by: Christian Schrefl <chrisi.schrefl@gmail.com> Link: https://github.com/Rust-for-Linux/pin-init/pull/37/commits/99cb1934425357e780ea5b0628f66633123847b8 [ Fixed commit authorship. - Benno ] Signed-off-by: Benno Lossin <benno.lossin@proton.me>
-rw-r--r--rust/pin-init/src/lib.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/rust/pin-init/src/lib.rs b/rust/pin-init/src/lib.rs
index 467ccc8bd616..745cf534d239 100644
--- a/rust/pin-init/src/lib.rs
+++ b/rust/pin-init/src/lib.rs
@@ -269,6 +269,10 @@
#![forbid(missing_docs, unsafe_op_in_unsafe_fn)]
#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(feature = "alloc", feature(allocator_api))]
+#![cfg_attr(
+ all(feature = "unsafe-pinned", CONFIG_RUSTC_HAS_UNSAFE_PINNED),
+ feature(unsafe_pinned)
+)]
use core::{
cell::UnsafeCell,
@@ -1557,3 +1561,11 @@ impl<T> Wrapper<T> for MaybeUninit<T> {
unsafe { cast_pin_init(value_init) }
}
}
+
+#[cfg(all(feature = "unsafe-pinned", CONFIG_RUSTC_HAS_UNSAFE_PINNED))]
+impl<T> Wrapper<T> for core::pin::UnsafePinned<T> {
+ fn pin_init<E>(init: impl PinInit<T, E>) -> impl PinInit<Self, E> {
+ // SAFETY: `UnsafePinned<T>` has a compatible layout to `T`.
+ unsafe { cast_pin_init(init) }
+ }
+}