diff --git a/proxmox/src/tools/mmap.rs b/proxmox/src/tools/mmap.rs index c77afb25..1ed84d1f 100644 --- a/proxmox/src/tools/mmap.rs +++ b/proxmox/src/tools/mmap.rs @@ -1,6 +1,7 @@ //! Memory mapping helpers. use std::convert::TryFrom; +use std::mem::MaybeUninit; use std::os::unix::io::RawFd; use std::{io, mem, ptr}; @@ -87,3 +88,20 @@ impl<'a, T> IntoIterator for &'a Mmap { <&'a [T] as IntoIterator>::into_iter(self) } } + +impl Mmap> { + /// Converts to `Mmap`. + /// + /// # Safety + /// + /// It is up to the caller to ensure this is safe, see + /// [`MaybeUninit::assume_init`](std::mem::MaybeUninit::assume_init). + pub unsafe fn assume_init(self) -> Mmap { + let out = Mmap { + data: self.data as *mut T, + len: self.len, + }; + std::mem::forget(self); + out + } +}