in include/wil/result_macros.h [2519:2558]
void SetFailureInfo(FailureInfo const &failure) WI_NOEXCEPT
{
m_failureInfo = failure;
size_t const cbNeed = details::ResultStringSize(failure.pszMessage) +
details::ResultStringSize(failure.pszCode) +
details::ResultStringSize(failure.pszFunction) +
details::ResultStringSize(failure.pszFile) +
details::ResultStringSize(failure.pszCallContext) +
details::ResultStringSize(failure.pszModule) +
details::ResultStringSize(failure.callContextCurrent.contextName) +
details::ResultStringSize(failure.callContextCurrent.contextMessage) +
details::ResultStringSize(failure.callContextOriginating.contextName) +
details::ResultStringSize(failure.callContextOriginating.contextMessage);
if (!m_spStrings.unique() || (m_spStrings.size() < cbNeed))
{
m_spStrings.reset();
m_spStrings.create(cbNeed);
}
size_t cbAlloc;
unsigned char *pBuffer = static_cast<unsigned char *>(m_spStrings.get(&cbAlloc));
unsigned char *pBufferEnd = (pBuffer != nullptr) ? pBuffer + cbAlloc : nullptr;
if (pBuffer)
{
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.pszMessage, &m_failureInfo.pszMessage);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.pszCode, &m_failureInfo.pszCode);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.pszFunction, &m_failureInfo.pszFunction);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.pszFile, &m_failureInfo.pszFile);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.pszCallContext, &m_failureInfo.pszCallContext);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.pszModule, &m_failureInfo.pszModule);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.callContextCurrent.contextName, &m_failureInfo.callContextCurrent.contextName);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.callContextCurrent.contextMessage, &m_failureInfo.callContextCurrent.contextMessage);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.callContextOriginating.contextName, &m_failureInfo.callContextOriginating.contextName);
pBuffer = details::WriteResultString(pBuffer, pBufferEnd, failure.callContextOriginating.contextMessage, &m_failureInfo.callContextOriginating.contextMessage);
ZeroMemory(pBuffer, pBufferEnd - pBuffer);
}
}