forked from AbleOS/holey-bytes
uhh oohh i guess it works
This commit is contained in:
parent
1263941560
commit
86df8ddc64
|
@ -64,8 +64,25 @@ impl Memory {
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut value = MaybeUninit::<Value>::zeroed();
|
let mut value = MaybeUninit::<Value>::zeroed();
|
||||||
|
let overflow = (lookup.offset + S::BYTES).saturating_sub(lookup.size - 1);
|
||||||
|
let normal = S::BYTES - overflow;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
core::ptr::copy_nonoverlapping::<u8>(lookup.ptr, value.as_mut_ptr().cast(), 1);
|
core::ptr::copy_nonoverlapping::<u8>(lookup.ptr, value.as_mut_ptr().cast(), normal);
|
||||||
|
if overflow != 0 {
|
||||||
|
let lookup = self.page_lookup(lookup.ptr as u64 + lookup.size as u64)?;
|
||||||
|
match lookup.perm {
|
||||||
|
Permission::Empty | Permission::Node => return None,
|
||||||
|
Permission::Readonly | Permission::Write | Permission::Exec => (),
|
||||||
|
}
|
||||||
|
|
||||||
|
core::ptr::copy_nonoverlapping::<u8>(
|
||||||
|
lookup.ptr,
|
||||||
|
value.as_mut_ptr().cast::<u8>().add(normal),
|
||||||
|
overflow,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Some(value.assume_init())
|
Some(value.assume_init())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,9 +93,27 @@ impl Memory {
|
||||||
if lookup.perm != Permission::Write {
|
if lookup.perm != Permission::Write {
|
||||||
return Err(());
|
return Err(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let overflow = (lookup.offset + S::BYTES).saturating_sub(lookup.size - 1);
|
||||||
|
let normal = S::BYTES - overflow;
|
||||||
unsafe {
|
unsafe {
|
||||||
core::ptr::copy_nonoverlapping::<u8>((&value as *const Value).cast(), lookup.ptr, 1)
|
core::ptr::copy_nonoverlapping::<u8>(
|
||||||
|
(&value as *const Value).cast(),
|
||||||
|
lookup.ptr,
|
||||||
|
normal,
|
||||||
|
);
|
||||||
|
|
||||||
|
if overflow != 0 {
|
||||||
|
let lookup = self
|
||||||
|
.page_lookup(lookup.ptr as u64 + lookup.size as u64)
|
||||||
|
.ok_or(())?;
|
||||||
|
|
||||||
|
core::ptr::copy_nonoverlapping::<u8>(
|
||||||
|
(&value as *const Value).cast::<u8>().add(normal),
|
||||||
|
lookup.ptr,
|
||||||
|
overflow,
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Reference in a new issue