(
ctx: &mut VmCtx,
v_fd: u32,
si_data: u32,
si_data_count: u32,
si_flags: u32,
)
| 1060 | #[ensures(ctx_safe(ctx))] |
| 1061 | #[ensures(trace_safe(trace, ctx))] |
| 1062 | pub fn wasi_sock_send( |
| 1063 | ctx: &mut VmCtx, |
| 1064 | v_fd: u32, |
| 1065 | si_data: u32, |
| 1066 | si_data_count: u32, |
| 1067 | si_flags: u32, |
| 1068 | ) -> RuntimeResult<u32> { |
| 1069 | let fd = ctx.fdmap.fd_to_native(v_fd)?; |
| 1070 | |
| 1071 | let mut num: u32 = 0; |
| 1072 | let mut i = 0; |
| 1073 | while i < si_data_count { |
| 1074 | body_invariant!(ctx_safe(ctx)); |
| 1075 | body_invariant!(trace_safe(trace, ctx)); |
| 1076 | |
| 1077 | let start = (si_data + i * 8) as usize; |
| 1078 | |
| 1079 | let (ptr, len) = ctx.read_u32_pair(start)?; |
| 1080 | if !ctx.fits_in_lin_mem(ptr, len) { |
| 1081 | return Err(Efault); |
| 1082 | } |
| 1083 | // Currently the flags field of trace_send must be set to 0: |
| 1084 | // https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md/#siflags |
| 1085 | let flags = 0; |
| 1086 | let result = trace_send(ctx, fd, ptr, len as usize, flags)?; |
| 1087 | num += result as u32; |
| 1088 | i += 1; |
| 1089 | } |
| 1090 | Ok(num) |
| 1091 | } |
| 1092 | |
| 1093 | // https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md#sock_shutdown |
| 1094 | // ensures: valid(v_fd) => trace = old(shutdown :: trace) |
no test coverage detected