diff options
Diffstat (limited to 'vcl/opengl/win/blocklist_parser.cxx')
-rw-r--r-- | vcl/opengl/win/blocklist_parser.cxx | 351 |
1 files changed, 0 insertions, 351 deletions
diff --git a/vcl/opengl/win/blocklist_parser.cxx b/vcl/opengl/win/blocklist_parser.cxx deleted file mode 100644 index 79e49f540028..000000000000 --- a/vcl/opengl/win/blocklist_parser.cxx +++ /dev/null @@ -1,351 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#include <opengl/win/blocklist_parser.hxx> - -#include <sal/log.hxx> - -WinBlocklistParser::WinBlocklistParser(const OUString& rURL, - std::vector<wgl::DriverInfo>& rDriverList) - : meBlockType(BlockType::UNKNOWN) - , mrDriverList(rDriverList) - , maURL(rURL) -{ -} - -void WinBlocklistParser::parse() -{ - xmlreader::XmlReader aReader(maURL); - handleContent(aReader); -} - -namespace { - -wgl::OperatingSystem getOperatingSystem(const OString& rString) -{ - if (rString == "all") - { - return wgl::DRIVER_OS_ALL; - } - else if (rString == "7") - { - return wgl::DRIVER_OS_WINDOWS_7; - } - else if (rString == "8") - { - return wgl::DRIVER_OS_WINDOWS_8; - } - else if (rString == "8_1") - { - return wgl::DRIVER_OS_WINDOWS_8_1; - } - else if (rString == "10") - { - return wgl::DRIVER_OS_WINDOWS_10; - } - - return wgl::DRIVER_OS_UNKNOWN; -} - -wgl::VersionComparisonOp getComparison(const OString& rString) -{ - if (rString == "less") - { - return wgl::DRIVER_LESS_THAN; - } - else if (rString == "less_equal") - { - return wgl::DRIVER_LESS_THAN_OR_EQUAL; - } - else if (rString == "greater") - { - return wgl::DRIVER_GREATER_THAN; - } - else if (rString == "greater_equal") - { - return wgl::DRIVER_GREATER_THAN_OR_EQUAL; - } - else if (rString == "equal") - { - return wgl::DRIVER_EQUAL; - } - else if (rString == "not_equal") - { - return wgl::DRIVER_NOT_EQUAL; - } - else if (rString == "between_exclusive") - { - return wgl::DRIVER_BETWEEN_EXCLUSIVE; - } - else if (rString == "between_inclusive") - { - return wgl::DRIVER_BETWEEN_INCLUSIVE; - } - else if (rString == "between_inclusive_start") - { - return wgl::DRIVER_BETWEEN_INCLUSIVE_START; - } - - throw InvalidFileException(); -} - -OUString getVendor(const OString& rString) -{ - if (rString == "all") - { - return ""; - } - else if (rString == "intel") - { - return "0x8086"; - } - else if (rString == "nvidia") - { - return "0x10de"; - } - else if (rString == "amd") - { - return "0x1022"; - } - else if (rString == "ati") - { - return "0x1002"; - } - else if (rString == "microsoft") - { - return "0x1414"; - } - else - { - // Allow having simply the hex number as such there, too. After all, it's hex numbers that - // are output to opengl_device.log. - return OStringToOUString(rString, RTL_TEXTENCODING_UTF8); - } -} - -uint64_t getVersion(const OString& rString) -{ - OUString aString = OStringToOUString(rString, RTL_TEXTENCODING_UTF8); - uint64_t nVersion; - bool bResult = wgl::ParseDriverVersion(aString, nVersion); - - if (!bResult) - { - throw InvalidFileException(); - } - - return nVersion; -} - -void handleDevices(wgl::DriverInfo& rDriver, xmlreader::XmlReader& rReader) -{ - int nLevel = 1; - bool bInMsg = false; - - while(true) - { - xmlreader::Span name; - int nsId; - - xmlreader::XmlReader::Result res = rReader.nextItem( - xmlreader::XmlReader::Text::Normalized, &name, &nsId); - - if (res == xmlreader::XmlReader::Result::Begin) - { - ++nLevel; - if (nLevel > 2) - throw InvalidFileException(); - - if (name == "msg") - { - bInMsg = true; - } - else if (name == "device") - { - int nsIdDeveice; - while (rReader.nextAttribute(&nsIdDeveice, &name)) - { - if (name == "id") - { - name = rReader.getAttributeValue(false); - OString aDeviceId(name.begin, name.length); - rDriver.maDevices.push_back(OStringToOUString(aDeviceId, RTL_TEXTENCODING_UTF8)); - } - } - } - else - throw InvalidFileException(); - } - else if (res == xmlreader::XmlReader::Result::End) - { - --nLevel; - bInMsg = false; - if (!nLevel) - break; - } - else if (res == xmlreader::XmlReader::Result::Text) - { - if (bInMsg) - { - OString sMsg(name.begin, name.length); - rDriver.maMsg = OStringToOUString(sMsg, RTL_TEXTENCODING_UTF8); - } - } - } -} - -} - -void WinBlocklistParser::handleEntry(wgl::DriverInfo& rDriver, xmlreader::XmlReader& rReader) -{ - if (meBlockType == BlockType::WHITELIST) - { - rDriver.mbWhitelisted = true; - } - else if (meBlockType == BlockType::BLACKLIST) - { - rDriver.mbWhitelisted = false; - } - else if (meBlockType == BlockType::UNKNOWN) - { - throw InvalidFileException(); - } - - xmlreader::Span name; - int nsId; - - while (rReader.nextAttribute(&nsId, &name)) - { - if (name == "os") - { - name = rReader.getAttributeValue(false); - OString sOS(name.begin, name.length); - rDriver.meOperatingSystem = getOperatingSystem(sOS); - } - else if (name == "vendor") - { - name = rReader.getAttributeValue(false); - OString sVendor(name.begin, name.length); - rDriver.maAdapterVendor = getVendor(sVendor); - } - else if (name == "compare") - { - name = rReader.getAttributeValue(false); - OString sCompare(name.begin, name.length); - rDriver.meComparisonOp = getComparison(sCompare); - } - else if (name == "version") - { - name = rReader.getAttributeValue(false); - OString sVersion(name.begin, name.length); - rDriver.mnDriverVersion = getVersion(sVersion); - } - else if (name == "minVersion") - { - name = rReader.getAttributeValue(false); - OString sMinVersion(name.begin, name.length); - rDriver.mnDriverVersion = getVersion(sMinVersion); - } - else if (name == "maxVersion") - { - name = rReader.getAttributeValue(false); - OString sMaxVersion(name.begin, name.length); - rDriver.mnDriverVersionMax = getVersion(sMaxVersion); - } - else - { - OString aAttrName(name.begin, name.length); - SAL_WARN("vcl.opengl", "unsupported attribute: " << aAttrName); - } - } - - handleDevices(rDriver, rReader); -} - -void WinBlocklistParser::handleList(xmlreader::XmlReader& rReader) -{ - xmlreader::Span name; - int nsId; - - while (true) - { - xmlreader::XmlReader::Result res = rReader.nextItem( - xmlreader::XmlReader::Text::NONE, &name, &nsId); - - if (res == xmlreader::XmlReader::Result::Begin) - { - if (name == "entry") - { - wgl::DriverInfo aDriver; - handleEntry(aDriver, rReader); - mrDriverList.push_back(aDriver); - } - else if (name == "entryRange") - { - wgl::DriverInfo aDriver; - handleEntry(aDriver, rReader); - mrDriverList.push_back(aDriver); - } - else - { - throw InvalidFileException(); - } - } - else if (res == xmlreader::XmlReader::Result::End) - { - break; - } - } -} - -void WinBlocklistParser::handleContent(xmlreader::XmlReader& rReader) -{ - while (true) - { - xmlreader::Span name; - int nsId; - - xmlreader::XmlReader::Result res = rReader.nextItem( - xmlreader::XmlReader::Text::NONE, &name, &nsId); - - if (res == xmlreader::XmlReader::Result::Begin) - { - if (name == "whitelist") - { - meBlockType = BlockType::WHITELIST; - handleList(rReader); - } - else if (name == "blacklist") - { - meBlockType = BlockType::BLACKLIST; - handleList(rReader); - } - else if (name == "root") - { - } - else - { - throw InvalidFileException(); - } - } - else if (res == xmlreader::XmlReader::Result::End) - { - if (name == "whitelist" || name == "blacklist") - { - meBlockType = BlockType::UNKNOWN; - } - } - else if (res == xmlreader::XmlReader::Result::Done) - { - break; - } - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |