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

Function SyncRun

plugins/wasmedge_zlib/zlibfunc.cpp:26–146  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

24
25template <typename T>
26auto SyncRun(const std::string_view &Msg, WasmEdgeZlibEnvironment &Env,
27 uint32_t ZStreamPtr, const Runtime::CallingFrame &Frame,
28 T Callback) -> Expect<int32_t> {
29
30 MEMINST_CHECK(MemInst, Frame, 0)
31 WasmZStream *ModuleZStream = MemInst->getPointer<WasmZStream *>(ZStreamPtr);
32
33 const auto HostZStreamIt = Env.ZStreamMap.find(ZStreamPtr);
34 if (HostZStreamIt == Env.ZStreamMap.end()) {
35 spdlog::error("[WasmEdge-Zlib] [{}-SyncRun] "sv
36 "Invalid ZStreamPtr received."sv,
37 Msg);
38 return Unexpect(ErrCode::Value::HostFuncError);
39 }
40 auto HostZStream = HostZStreamIt->second.get();
41 const auto GZHeaderStoreIt = Env.GZHeaderMap.find(ZStreamPtr);
42
43 HostZStream->next_in =
44 MemInst->getPointer<unsigned char *>(ModuleZStream->NextIn);
45 HostZStream->avail_in = ModuleZStream->AvailIn;
46 HostZStream->total_in = ModuleZStream->TotalIn;
47
48 HostZStream->next_out =
49 MemInst->getPointer<unsigned char *>(ModuleZStream->NextOut);
50 HostZStream->avail_out = ModuleZStream->AvailOut;
51 HostZStream->total_out = ModuleZStream->TotalOut;
52
53 // TODO: ignore msg for now
54 // ignore state
55 // ignore zalloc, zfree, opaque
56
57 HostZStream->data_type = ModuleZStream->DataType;
58 HostZStream->adler = ModuleZStream->Adler;
59 HostZStream->reserved = ModuleZStream->Reserved;
60
61 const auto PreComputeNextIn = HostZStream->next_in;
62 const auto PreComputeNextOut = HostZStream->next_out;
63
64 unsigned char *PreComputeExtra{};
65 unsigned char *PreComputeName{};
66 unsigned char *PreComputeComment{};
67
68 if (GZHeaderStoreIt != Env.GZHeaderMap.end()) {
69 // Sync GZ Header
70
71 auto *ModuleGZHeader = MemInst->getPointer<WasmGZHeader *>(
72 GZHeaderStoreIt->second.WasmGZHeaderOffset);
73 auto *HostGZHeader = GZHeaderStoreIt->second.HostGZHeader.get();
74
75 HostGZHeader->text = ModuleGZHeader->Text;
76 HostGZHeader->time = ModuleGZHeader->Time;
77 HostGZHeader->xflags = ModuleGZHeader->XFlags;
78 HostGZHeader->os = ModuleGZHeader->OS;
79
80 HostGZHeader->extra =
81 MemInst->getPointer<unsigned char *>(ModuleGZHeader->Extra);
82 HostGZHeader->extra_len = ModuleGZHeader->ExtraLen;
83 HostGZHeader->extra_max = ModuleGZHeader->ExtraMax;

Callers 1

bodyMethod · 0.85

Calls 5

UnexpectFunction · 0.85
errorFunction · 0.50
findMethod · 0.45
endMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected