Releases: Rust-for-Linux/pin-init
Releases · Rust-for-Linux/pin-init
v0.0.10
Added
Wrapper<T>trait added for creating wrapper structs with a structurally pinned value.MaybeZeroablederive macro to try to deriveZeroable, but not error if not all fields
implement it.unsafe fn cast_[pin_]init()functions to unsafely change the initialized type of an initializerimpl<T, E> [Pin]Init<T, E> for Result<T, E>, so results are now (pin-)initializers- add
Zeroable::init_zeroed()delegating toinit_zeroed() - add new
zeroed(), a safe version ofmem::zeroed()and also provide it viaZeroable::zeroed() - implement
ZeroableforOption<&T>andOption<&mut T> - implement
ZeroableforOption<[unsafe] [extern "abi"] fn(...args...) -> ret>for"Rust"and
"C"ABIs and up to 20 arguments
Changed
InPlaceInitnow only exists when theallocorstdfeatures are enabled- added support for visibility in
Zeroablederive macro - added support for
unions inZeroablederive macro - renamed the crate from
pinned-inittopin-initandpinned-init-macrotopin-init-internal - blanket impls of
InitandPinInitfromimpl<T, E> [Pin]Init<T, E> for Tto
impl<T> [Pin]Init<T> for T - renamed
zeroed()toinit_zeroed()
Fixed
-
Zeroableimplementation forOption<Box<T>>&Option<NonNull<T>>to only allowT: Sized
(soundness issue)Full changes: v0.0.9...v0.0.10
v0.0.9
Added
InPlaceWritetrait to re-initialize already existing allocations,assert_pinned!macro to check if a field is marked with#[pin],- compatibility with stable Rust, thanks a lot to @bonzini! #24 and #23:
- the
allocfeature enables support forallocator_apiand reflects the old behavior, if it is
disabled, then infallible allocations are assumed (just like the standard library does).
- the
Fixed
- guard hygiene wrt constants in
[try_][pin_]init!
Full changes: v0.0.8...v0.0.9
v0.0.8
Changed
- return type of
zeroed()fromimpl Init<T, E>toimpl Init<T>(also removing the generic
parameterE) - removed the default error of
try_[pin_]init!, now you always have to specify an error using
? Errorat the end - put
InPlaceInitbehind theallocfeature flag, this allows stable usage of the#![no_std]
part of the crate
Full changes: v0.0.7...v0.0.8
v0.0.7
Added
Zeroablederive macro..Zeroable::zeroed()tail expression support in[try_][pin_]init!macros: allowed to omit
fields, omitted fields are initialized with0[pin_]chainfunctions to modify a value after an initializer has run[pin_]init_array_from_fnto createimpl [Pin]Init<[T; N], E>from a generator closure
fn(usize) -> impl [Pin]Init<T, E>impl Zeroable for UnsafeCell
Changed
PinInitis now a supertrait ofInit(before there was a blanket impl)
Removed
- coverage workflow and usage of
#[feature(no_coverage)] impl Zeroable for Infallible(see Security)
Fixed
Selfin generic bounds on structs with#[pin_data]- const generic default parameter values can now be used on structs with
#[pin_data]
Security
impl Zeroable for Infallible(#13) it was possible to trigger UB by creating a value of type
Box<Infallible>viaBox::init(zeroed())
Full Changes: v0.0.6...v0.0.7