add manual interface for borrowing a GuestPtr (#40)

* add manual interface for borrowing a GuestPtr

* add manual borrow checking methods for slice and str as well

* update test to use borrow_slice
This commit is contained in:
Pat Hickey
2020-03-10 12:33:02 -07:00
committed by GitHub
parent 06bcac3e43
commit 2139020d6d
2 changed files with 43 additions and 6 deletions

View File

@@ -129,11 +129,13 @@ impl crate::wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
let mut bc = GuestBorrows::new();
let mut slices: Vec<&'_ mut [u8]> = Vec::new();
// Mark the iov elements as borrowed, to ensure that they does not
// overlap with any of the as_raw regions.
bc.borrow_slice(&iovs).expect("borrow iovec array");
for iov_ptr in iovs.iter() {
let iov: types::Iovec = iov_ptr
.expect("iovec element pointer is valid")
.read()
.expect("read iovec element");
let iov_ptr = iov_ptr.expect("iovec element pointer is valid");
let iov: types::Iovec = iov_ptr.read().expect("read iovec element");
let base: GuestPtr<u8> = iov.buf;
let len: u32 = iov.buf_len;
let buf: GuestPtr<[u8]> = base.as_array(len);