This commit is contained in:
Sergey Pepyakin 2019-07-03 18:21:42 +02:00
parent 97e67cbfd7
commit 7894e5e5fc
1 changed files with 9 additions and 25 deletions

View File

@ -63,8 +63,7 @@ impl Mmap {
// memory. // memory.
libc::MAP_FAILED => Err("mmap returned an error"), libc::MAP_FAILED => Err("mmap returned an error"),
_ => { _ => {
let ptr = NonNull::new(ptr_or_err as *mut u8) let ptr = NonNull::new(ptr_or_err as *mut u8).ok_or("mmap returned 0")?;
.ok_or("mmap returned 0")?;
Ok(Self { ptr, len }) Ok(Self { ptr, len })
} }
} }
@ -130,31 +129,16 @@ impl ByteBuf {
let new_mmap = if new_len == 0 { let new_mmap = if new_len == 0 {
None None
} else { } else {
if self.len() == 0 { let mut new_mmap = Mmap::new(new_len)?;
Some(Mmap::new(new_len)?) if let Some(cur_mmap) = self.mmap.take() {
} else { let src = cur_mmap.as_slice();
let mut new_mmap = Mmap::new(new_len)?; let dst = new_mmap.as_slice_mut();
let amount = src.len().min(dst.len());
{ dst[..amount].copy_from_slice(&src[..amount]);
let src = self
.mmap
.as_ref()
.expect(
"self.len() != 0;
self.mmap is created if self.len() != 0;
self.mmap is not `None`;
qed",
)
.as_slice();
let dst = new_mmap.as_slice_mut();
let amount = src.len().min(dst.len());
dst[..amount].copy_from_slice(&src[..amount]);
}
Some(new_mmap)
} }
Some(new_mmap)
}; };
self.mmap = new_mmap; self.mmap = new_mmap;
Ok(()) Ok(())
} }