void Set()

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);
                }
            }