MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / write_to_guest

Method write_to_guest

crates/wasi-common/src/string_array.rs:48–74  ·  view source on GitHub ↗
(
        &self,
        memory: &mut GuestMemory<'_>,
        buffer: GuestPtr<u8>,
        element_heads: GuestPtr<GuestPtr<u8>>,
    )

Source from the content-addressed store, hash-verified

46 }
47
48 pub fn write_to_guest(
49 &self,
50 memory: &mut GuestMemory<'_>,
51 buffer: GuestPtr<u8>,
52 element_heads: GuestPtr<GuestPtr<u8>>,
53 ) -> Result<(), Error> {
54 let element_heads = element_heads.as_array(self.number_elements());
55 let buffer = buffer.as_array(self.cumulative_size());
56 let mut cursor = 0;
57 for (elem, head) in self.elems.iter().zip(element_heads.iter()) {
58 let bytes = elem.as_bytes();
59 let len = bytes.len() as u32;
60 {
61 let elem_buffer = buffer
62 .get_range(cursor..(cursor + len))
63 .ok_or(Error::invalid_argument())?; // Elements don't fit in buffer provided
64 memory.copy_from_slice(bytes, elem_buffer)?;
65 }
66 memory.write(
67 buffer.get(cursor + len).ok_or(Error::invalid_argument())?,
68 0,
69 )?; // 0 terminate
70 memory.write(head?, buffer.get(cursor).expect("already validated"))?;
71 cursor += len + 1;
72 }
73 Ok(())
74 }
75}

Callers 2

args_getMethod · 0.80
environ_getMethod · 0.80

Calls 12

OkFunction · 0.85
number_elementsMethod · 0.80
cumulative_sizeMethod · 0.80
as_bytesMethod · 0.80
as_arrayMethod · 0.45
iterMethod · 0.45
lenMethod · 0.45
get_rangeMethod · 0.45
copy_from_sliceMethod · 0.45
writeMethod · 0.45
getMethod · 0.45
expectMethod · 0.45

Tested by

no test coverage detected