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 data = caller.memory_read_into_vec(offset as usize, length as usize)?;
13    syscall_write_output_impl(caller.data_mut(), &data);
14    Ok(())
15}
16
17pub fn syscall_write_output_impl(ctx: &mut RuntimeContext, data: &[u8]) {
18    ctx.execution_result.output.extend_from_slice(data);
19}