// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. // // -------------------------------------------------------------------------------------------------- // configuration.cpp // // // Access and update configuration values, falling back on legacy CLRConfig methods where necessary. // // -------------------------------------------------------------------------------------------------- #include "stdafx.h" #include "clrconfig.h" #include "configuration.h" LPCWSTR *knobNames = nullptr; LPCWSTR *knobValues = nullptr; int numberOfKnobs = 0; void Configuration::InitializeConfigurationKnobs(int numberOfConfigs, LPCWSTR *names, LPCWSTR *values) { numberOfKnobs = numberOfConfigs; // Neither should be null, or both should be null _ASSERT(!((names == nullptr) ^ (values == nullptr))); knobNames = names; knobValues = values; } static LPCWSTR GetConfigurationValue(LPCWSTR name) { _ASSERT(name != nullptr); if (name == nullptr || knobNames == nullptr || knobValues == nullptr) { return nullptr; } for (int i = 0; i < numberOfKnobs; ++i) { _ASSERT(knobNames[i] != nullptr); if (wcscmp(name, knobNames[i]) == 0) { return knobValues[i]; } } return nullptr; } DWORD Configuration::GetKnobDWORDValue(LPCWSTR name, const CLRConfig::ConfigDWORDInfo& dwordInfo) { bool returnedDefaultValue; DWORD legacyValue = CLRConfig::GetConfigValue(dwordInfo, true /* acceptExplicitDefaultFromRegutil */, &returnedDefaultValue); if (!returnedDefaultValue) { return legacyValue; } LPCWSTR knobValue = GetConfigurationValue(name); if (knobValue != nullptr) { return wcstoul(knobValue, nullptr, 0); } return legacyValue; } DWORD Configuration::GetKnobDWORDValue(LPCWSTR name, DWORD defaultValue) { LPCWSTR knobValue = GetConfigurationValue(name); if (knobValue != nullptr) { return wcstoul(knobValue, nullptr, 0); } return defaultValue; } ULONGLONG Configuration::GetKnobULONGLONGValue(LPCWSTR name) { LPCWSTR knobValue = GetConfigurationValue(name); if (knobValue != nullptr) { return _wcstoui64(knobValue, nullptr, 0); } return 0; } LPCWSTR Configuration::GetKnobStringValue(LPCWSTR name, const CLRConfig::ConfigStringInfo& stringInfo) { LPCWSTR value = CLRConfig::GetConfigValue(stringInfo); if (value == nullptr) { value = GetConfigurationValue(name); } return value; } LPCWSTR Configuration::GetKnobStringValue(LPCWSTR name) { return GetConfigurationValue(name); } bool Configuration::GetKnobBooleanValue(LPCWSTR name, const CLRConfig::ConfigDWORDInfo& dwordInfo) { bool returnedDefaultValue; DWORD legacyValue = CLRConfig::GetConfigValue(dwordInfo, true /* acceptExplicitDefaultFromRegutil */, &returnedDefaultValue); if (!returnedDefaultValue) { return (legacyValue != 0); } LPCWSTR knobValue = GetConfigurationValue(name); if (knobValue != nullptr) { return (wcscmp(knobValue, W("true")) == 0); } return (legacyValue != 0); } bool Configuration::GetKnobBooleanValue(LPCWSTR name, bool defaultValue) { LPCWSTR knobValue = GetConfigurationValue(name); if (knobValue != nullptr) { return (wcscmp(knobValue, W("true")) == 0); } return defaultValue; }