MCPcopy Create free account
hub / github.com/WasmEdge/WasmEdge / writeUntilFull

Function writeUntilFull

test/host/wasi/wasi.cpp:272–300  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

270
271template <typename SockSendT>
272void writeUntilFull(WasmEdge::Runtime::Instance::MemoryInstance &MemInst,
273 WasmEdge::Runtime::CallingFrame &CallFrame,
274 SockSendT &WasiSockSend, int32_t Fd) {
275 using namespace std::literals;
276 std::array<WasmEdge::ValVariant, 1> Errno;
277 while (true) {
278 const uint32_t IOVecSize = 1;
279 const uint32_t NWrittenPtr = 0;
280 const uint32_t RoFlagsPtr = NWrittenPtr + sizeof(__wasi_size_t);
281 const uint32_t IOVecPtr = RoFlagsPtr + sizeof(__wasi_size_t);
282 const uint32_t DataPtr = IOVecPtr + sizeof(__wasi_iovec_t) * IOVecSize;
283 const uint32_t SiFlags = 0;
284 const auto Data = "somedata"sv;
285 writeString(MemInst, Data, DataPtr);
286 auto IOVec = MemInst.getSpan<__wasi_ciovec_t>(IOVecPtr, IOVecSize);
287 IOVec[0].buf = WasmEdge::EndianValue(DataPtr).le();
288 IOVec[0].buf_len =
289 WasmEdge::EndianValue(static_cast<__wasi_size_t>(Data.size())).le();
290 EXPECT_TRUE(
291 WasiSockSend.run(CallFrame,
292 std::initializer_list<WasmEdge::ValVariant>{
293 Fd, IOVecPtr, IOVecSize, SiFlags, NWrittenPtr},
294 Errno));
295 if (Errno[0].get<int32_t>() != __WASI_ERRNO_SUCCESS) {
296 EXPECT_EQ(Errno[0].get<int32_t>(), __WASI_ERRNO_AGAIN);
297 break;
298 }
299 }
300}
301
302} // namespace
303

Callers 1

TESTFunction · 0.85

Calls 5

EndianValueClass · 0.85
leMethod · 0.80
writeStringFunction · 0.70
sizeMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected