rust: types: add Opaque::pin_init
Analogous to `Opaque::new` add `Opaque::pin_init`, which instead of a value `T` takes a `PinInit<T>` and returns a `PinInit<Opaque<T>>`. Reviewed-by: Alice Ryhl <aliceryhl@google.com> Suggested-by: Alice Ryhl <aliceryhl@google.com> Signed-off-by: Danilo Krummrich <dakr@kernel.org> Tested-by: Dirk Behme <dirk.behme@de.bosch.com> Tested-by: Fabien Parent <fabien.parent@linaro.org> Link: https://lore.kernel.org/r/20241219170425.12036-6-dakr@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5115820729
commit
2d3bf6ffe2
@@ -281,6 +281,17 @@ impl<T> Opaque<T> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Create an opaque pin-initializer from the given pin-initializer.
|
||||
pub fn pin_init(slot: impl PinInit<T>) -> impl PinInit<Self> {
|
||||
Self::ffi_init(|ptr: *mut T| {
|
||||
// SAFETY:
|
||||
// - `ptr` is a valid pointer to uninitialized memory,
|
||||
// - `slot` is not accessed on error; the call is infallible,
|
||||
// - `slot` is pinned in memory.
|
||||
let _ = unsafe { init::PinInit::<T>::__pinned_init(slot, ptr) };
|
||||
})
|
||||
}
|
||||
|
||||
/// Creates a pin-initializer from the given initializer closure.
|
||||
///
|
||||
/// The returned initializer calls the given closure with the pointer to the inner `T` of this
|
||||
|
||||
Reference in New Issue
Block a user