Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Link: https://lore.kernel.org/r/20250827104147.717203-6-marcandre.lureau@redhat.com Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
18 lines
718 B
Rust
18 lines
718 B
Rust
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
//! Defines a trait for structs that can be safely initialized with zero bytes.
|
|
|
|
/// Encapsulates the requirement that
|
|
/// `MaybeUninit::<Self>::zeroed().assume_init()` does not cause undefined
|
|
/// behavior.
|
|
///
|
|
/// # Safety
|
|
///
|
|
/// Do not add this trait to a type unless all-zeroes is a valid value for the
|
|
/// type. In particular, raw pointers can be zero, but references and
|
|
/// `NonNull<T>` cannot.
|
|
pub unsafe trait Zeroable: Default {
|
|
/// Return a value of Self whose memory representation consists of all
|
|
/// zeroes, with the possible exclusion of padding bytes.
|
|
const ZERO: Self = unsafe { ::core::mem::MaybeUninit::<Self>::zeroed().assume_init() };
|
|
}
|