1use crate::program::{HelperScope, MutableUserMemory};
2
3pub type Helper =
5 fn(scope: &HelperScope, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) -> Result<u64, ()>;
6
7pub fn write_cstr(mut input: &[&[u8]], output: &mut MutableUserMemory) -> u64 {
11 let input_len = input.iter().map(|x| x.len()).sum::<usize>();
12
13 if output.len() == 0 {
14 return input_len as u64;
15 }
16
17 let copy_len = input_len.min(output.len() - 1);
18 let mut written_len = 0;
19
20 while written_len < copy_len {
21 let part = input[0];
22 input = &input[1..];
23 let part_copy_len = part.len().min(copy_len - written_len);
24 output[written_len..written_len + part_copy_len].copy_from_slice(&part[..part_copy_len]);
25 written_len += part_copy_len;
26 }
27
28 output[copy_len] = 0;
29 input_len as u64
30}