try!(self.memory.deallocate(contents_ptr));
}
Err(EvalError::ReadBytesAsPointer) => {
- let possible_drop_fill = try!(self.memory.read_usize(ptr));
- if possible_drop_fill == mem::POST_DROP_U64 {
+ let size = self.memory.pointer_size;
+ let possible_drop_fill = try!(self.memory.read_bytes(ptr, size));
+ if possible_drop_fill.iter().all(|&b| b == mem::POST_DROP_U8) {
return Ok(());
} else {
return Err(EvalError::ReadBytesAsPointer);
Ok(())
}
+ pub fn read_bytes(&self, ptr: Pointer, size: usize) -> EvalResult<&[u8]> {
+ self.get_bytes(ptr, size)
+ }
+
pub fn write_bytes(&mut self, ptr: Pointer, src: &[u8]) -> EvalResult<()> {
let bytes = try!(self.get_bytes_mut(ptr, src.len()));
bytes.clone_from_slice(src);