Skip to main content

fluentbase_runtime/syscall_handler/host/
write_output.rs

1/// Builtin to append bytes to the runtime output buffer.
2use crate::RuntimeContext;
3use rwasm::{StoreTr, TrapCode, Value};
4
5/// Reads a slice from linear memory and appends it to ctx.execution_result.output.
6pub fn syscall_write_output_handler(
7    caller: &mut impl StoreTr<RuntimeContext>,
8    params: &[Value],
9    _result: &mut [Value],
10) -> Result<(), TrapCode> {
11    let (offset, length) = (params[0].i32().unwrap(), params[1].i32().unwrap());
12    let mut data = vec![0u8; length as usize];
13    caller.memory_read(offset as usize, &mut data)?;
14    syscall_write_output_impl(caller.data_mut(), &data);
15    Ok(())
16}
17
18pub fn syscall_write_output_impl(ctx: &mut RuntimeContext, data: &[u8]) {
19    ctx.execution_result.output.extend_from_slice(data);
20}