in include/wil/result.h [472:510]
void Set(const FailureInfo& info, unsigned int newSequenceId)
{
sequenceId = newSequenceId;
hr = info.hr;
fileName = nullptr;
lineNumber = static_cast<unsigned short>(info.uLineNumber);
failureType = static_cast<unsigned char>(info.type);
modulePath = nullptr;
returnAddress = info.returnAddress;
callerReturnAddress = info.callerReturnAddress;
message = nullptr;
size_t neededSize = details::ResultStringSize(info.pszFile) +
details::ResultStringSize(info.pszModule) +
details::ResultStringSize(info.pszMessage);
if (!stringBuffer || (stringBufferSize < neededSize))
{
auto newBuffer = details::ProcessHeapAlloc(HEAP_ZERO_MEMORY, neededSize);
if (newBuffer)
{
::HeapFree(::GetProcessHeap(), 0, stringBuffer);
stringBuffer = newBuffer;
stringBufferSize = neededSize;
}
}
if (stringBuffer)
{
unsigned char *pBuffer = static_cast<unsigned char *>(stringBuffer);
unsigned char *pBufferEnd = pBuffer + stringBufferSize;
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, info.pszFile, &fileName);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, info.pszModule, &modulePath);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, info.pszMessage, &message);
ZeroMemory(pBuffer, pBufferEnd - pBuffer);
}
}