bool XmlDataGdbServerRegisterFile::HandleTargetFileTags()

in Exdi/exdigdbsrv/GdbSrvControllerLib/XmlDataHelpers.cpp [1205:1267]


bool XmlDataGdbServerRegisterFile::HandleTargetFileTags(_In_ TAG_ATTR_LIST* const pTagAttrList,
    _Out_ ConfigExdiGdbSrvData* pConfigTable)
{
    HRESULT hr;
    bool isDone = false;

    ConfigTargetDescriptionFileEntry targetFileData = { 0 };
    if (IsTargetDescriptionFile(pTagAttrList->tagName))
    {
        hr = XmlDataHelpers::GetXmlTagAttributeValues(pTagAttrList, attrTargetDescriptionArchitectureName, ARRAYSIZE(attrTargetDescriptionArchitectureName),
            sizeof(ConfigTargetDescriptionFileEntry), static_cast<void*>(&targetFileData));
        if (SUCCEEDED(hr))
        {
            isDone = SetFileTargetArchitecture(targetFileData.targetArchitecture, pConfigTable);
            if (!isDone)
            {
                if (targetFileData.targetArchitecture[0] == '\x0')
                {
                    pConfigTable->file.isTargetTagEmpty = true;
                }
                isDone = true;
            }
        }
    }

    if (IsRegisterFileReference(pTagAttrList->tagName))
    {
        hr = XmlDataHelpers::GetXmlTagAttributeValues(pTagAttrList, attrTargetDescriptionRegisterFile, ARRAYSIZE(attrTargetDescriptionRegisterFile),
            sizeof(ConfigTargetDescriptionFileEntry), static_cast<void*>(&targetFileData));
        if (SUCCEEDED(hr))
        {
            if (pConfigTable->file.registerGroupFiles.get() == nullptr)
            {
                pConfigTable->file.registerGroupFiles.reset(new(std::nothrow) targetDescriptionFilesMap());
                if (pConfigTable->file.registerGroupFiles == nullptr)
                {
                    throw _com_error(E_OUTOFMEMORY);
                }
            }

            isDone = true;
            if (wcsstr(targetFileData.registerFile, L"core") != nullptr || wcsstr(targetFileData.registerFile, L"general") != nullptr ||
                wcsstr(targetFileData.registerFile, L"i386-64") != nullptr)
            {
                pConfigTable->file.registerGroupFiles->insert({ RegisterGroupType::CORE_REGS, move(targetFileData.registerFile) });
            }
            else if (wcsstr(targetFileData.registerFile, L"system") != nullptr || wcsstr(targetFileData.registerFile, L"banked") != nullptr)
            {
                pConfigTable->file.registerGroupFiles->insert({ RegisterGroupType::SYSTEM_REGS, move(targetFileData.registerFile) });
            }
            else if (wcsstr(targetFileData.registerFile, L"fpu") != nullptr || wcsstr(targetFileData.registerFile, L"simdfp") != nullptr)
            {
                pConfigTable->file.registerGroupFiles->insert({ RegisterGroupType::FPU_REGS, move(targetFileData.registerFile) });
            }
            else
            {
                assert(false);
                isDone = false;
            }
        }
    }
    return isDone;
}