Rollup merge of #62257 - RalfJung:miri-c-str, r=estebank
forward read_c_str method from Memory to Alloc This is more convenient to call when one starts with a `Scalar` (which is the common case). `read_c_str` is only used in Miri.
This commit is contained in:
commit
947d7cf16d
|
@ -728,6 +728,8 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
|
||||||
|
|
||||||
/// Reading and writing.
|
/// Reading and writing.
|
||||||
impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
|
impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
|
||||||
|
/// Reads the given number of bytes from memory. Returns them as a slice.
|
||||||
|
///
|
||||||
/// Performs appropriate bounds checks.
|
/// Performs appropriate bounds checks.
|
||||||
pub fn read_bytes(
|
pub fn read_bytes(
|
||||||
&self,
|
&self,
|
||||||
|
@ -741,6 +743,14 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> {
|
||||||
self.get(ptr.alloc_id)?.get_bytes(self, ptr, size)
|
self.get(ptr.alloc_id)?.get_bytes(self, ptr, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Reads a 0-terminated sequence of bytes from memory. Returns them as a slice.
|
||||||
|
///
|
||||||
|
/// Performs appropriate bounds checks.
|
||||||
|
pub fn read_c_str(&self, ptr: Scalar<M::PointerTag>) -> InterpResult<'tcx, &[u8]> {
|
||||||
|
let ptr = self.force_ptr(ptr)?; // We need to read at least 1 byte, so we *need* a ptr.
|
||||||
|
self.get(ptr.alloc_id)?.read_c_str(self, ptr)
|
||||||
|
}
|
||||||
|
|
||||||
/// Performs appropriate bounds checks.
|
/// Performs appropriate bounds checks.
|
||||||
pub fn copy(
|
pub fn copy(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
|
Loading…
Reference in New Issue