From f8c008732679afa0524863a6d4890be0c96dc0f0 Mon Sep 17 00:00:00 2001 From: Hao Hou Date: Mon, 20 Feb 2023 15:23:39 +0800 Subject: [PATCH] Fix issue #70 --- d4-framefile/src/randfile.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/d4-framefile/src/randfile.rs b/d4-framefile/src/randfile.rs index 7526605..b2a67d8 100644 --- a/d4-framefile/src/randfile.rs +++ b/d4-framefile/src/randfile.rs @@ -269,11 +269,15 @@ pub mod mapping { } #[derive(Clone)] - pub struct MappingHandle(Arc); + pub struct MappingHandle(Arc>); impl AsRef<[u8]> for MappingHandle { fn as_ref(&self) -> &[u8] { - self.0.as_ref() + if let Some(ref mmap) = *self.0 { + mmap.as_ref() + } else { + &[] + } } } @@ -283,7 +287,11 @@ pub mod mapping { .inner .lock() .map_err(|_| Error::new(ErrorKind::Other, "Lock Error"))?; - let mapped = unsafe { MmapOptions::new().offset(offset).len(size).map(&*inner)? }; + let mapped = if size > 0 { + Some(unsafe { MmapOptions::new().offset(offset).len(size).map(&*inner)? }) + } else { + None + }; drop(inner); Ok(MappingHandle(Arc::new(mapped))) }