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

Function WasmEdge_Driver_ArgvCreate

lib/api/wasmedge.cpp:3696–3729  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3694
3695#if WASMEDGE_OS_WINDOWS
3696WASMEDGE_CAPI_EXPORT const char **
3697WasmEdge_Driver_ArgvCreate(int Argc, const wchar_t *Argv[]) noexcept {
3698 try {
3699 const Span<const wchar_t *> Args(Argv, static_cast<size_t>(Argc));
3700 const size_t PointerArraySize = static_cast<size_t>(Argc) * sizeof(char *);
3701 size_t StringBufferSize = 0;
3702 for (auto Arg : Args) {
3703 const auto Res = std::max<size_t>(
3704 static_cast<size_t>(winapi::WideCharToMultiByte(
3705 winapi::CP_UTF8_, 0, Arg, -1, nullptr, 0, nullptr, nullptr)),
3706 1u);
3707 StringBufferSize += Res;
3708 }
3709 auto Buffer = std::make_unique<char[]>(PointerArraySize + StringBufferSize);
3710 Span<char *> PointerArray(reinterpret_cast<char **>(Buffer.get()),
3711 static_cast<size_t>(Argc));
3712 Span<char> StringBuffer(Buffer.get() + PointerArraySize, StringBufferSize);
3713 for (auto Arg : Args) {
3714 PointerArray[0] = StringBuffer.data();
3715 PointerArray = PointerArray.subspan(1);
3716 const auto Res = std::max<size_t>(
3717 static_cast<size_t>(winapi::WideCharToMultiByte(
3718 winapi::CP_UTF8_, 0, Arg, -1, StringBuffer.data(),
3719 static_cast<int>(StringBuffer.size()), nullptr, nullptr)),
3720 1);
3721 StringBuffer = StringBuffer.subspan(Res);
3722 }
3723
3724 return reinterpret_cast<const char **>(Buffer.release());
3725 } catch (...) {
3726 handleCAPIError();
3727 return nullptr;
3728 }
3729}
3730
3731WASMEDGE_CAPI_EXPORT void
3732WasmEdge_Driver_ArgvDelete(const char *Argv[]) noexcept {

Callers 3

wmainFunction · 0.85
wmainFunction · 0.85
wmainFunction · 0.85

Calls 6

handleCAPIErrorFunction · 0.85
subspanMethod · 0.80
getMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45
releaseMethod · 0.45

Tested by

no test coverage detected