(
&self,
vm: &VirtualMachine,
f: impl FnOnce(&mut [u8]) -> R,
)
| 889 | |
| 890 | #[inline] |
| 891 | fn try_writable<R>( |
| 892 | &self, |
| 893 | vm: &VirtualMachine, |
| 894 | f: impl FnOnce(&mut [u8]) -> R, |
| 895 | ) -> PyResult<R> { |
| 896 | if matches!(self.access, AccessMode::Read) { |
| 897 | return Err(vm.new_type_error("mmap can't modify a readonly memory map.")); |
| 898 | } |
| 899 | |
| 900 | match self.check_valid(vm)?.deref_mut().as_mut().unwrap() { |
| 901 | MmapObj::Write(mmap) => Ok(f(&mut mmap[..])), |
| 902 | #[cfg(windows)] |
| 903 | MmapObj::Named(named) => Ok(f(unsafe { |
| 904 | core::slice::from_raw_parts_mut(named.view_ptr, named.len) |
| 905 | })), |
| 906 | _ => unreachable!("already checked"), |
| 907 | } |
| 908 | } |
| 909 | |
| 910 | fn check_valid(&self, vm: &VirtualMachine) -> PyResult<PyMutexGuard<'_, Option<MmapObj>>> { |
| 911 | let m = self.mmap.lock(); |
no test coverage detected