diff --git a/core/os_interface/windows/debug_registry_reader.cpp b/core/os_interface/windows/debug_registry_reader.cpp index 2528b7a3c4..94497aace8 100644 --- a/core/os_interface/windows/debug_registry_reader.cpp +++ b/core/os_interface/windows/debug_registry_reader.cpp @@ -65,6 +65,11 @@ int32_t RegistryReader::getSetting(const char *settingName, int32_t defaultValue &size); RegCloseKey(Key); value = ERROR_SUCCESS == success ? value : defaultValue; + } else { // Check environment variables + char *envValue = getenv(settingName); + if (envValue) { + value = atoi(envValue); + } } return value; @@ -118,6 +123,11 @@ std::string RegistryReader::getSetting(const char *settingName, const std::strin } RegCloseKey(Key); + } else { // Check environment variables + char *envValue = getenv(settingName); + if (envValue) { + keyValue.assign(envValue); + } } return keyValue; } diff --git a/core/utilities/debug_settings_reader.h b/core/utilities/debug_settings_reader.h index 50751168a4..d29c87bda1 100644 --- a/core/utilities/debug_settings_reader.h +++ b/core/utilities/debug_settings_reader.h @@ -29,5 +29,6 @@ class SettingsReader { virtual std::string getSetting(const char *settingName, const std::string &value) = 0; virtual const char *appSpecificLocation(const std::string &name) = 0; static const char *settingsFileName; + MOCKABLE_VIRTUAL char *getenv(const char *settingName) { return ::getenv(settingName); }; }; }; // namespace NEO diff --git a/unit_tests/os_interface/windows/registry_reader_tests.cpp b/unit_tests/os_interface/windows/registry_reader_tests.cpp index 89e6255be3..8fe7006cde 100644 --- a/unit_tests/os_interface/windows/registry_reader_tests.cpp +++ b/unit_tests/os_interface/windows/registry_reader_tests.cpp @@ -47,3 +47,10 @@ TEST_F(RegistryReaderTest, givenRegistryReaderWhenItIsCreatedWithRegKeySpecified TestedRegistryReader registryReader(regKey); EXPECT_STREQ(regKey.c_str(), registryReader.getRegKey()); } + +TEST_F(RegistryReaderTest, givenRegistryReaderWhenEnvironmentVariableExistsThenReturnCorrectValue) { + char *envVar = "TestedEnvironmentVariable"; + std::string value = "defaultValue"; + TestedRegistryReader registryReader(""); + EXPECT_EQ("TestedEnvironmentVariableValue", registryReader.getSetting(envVar, value)); +} diff --git a/unit_tests/os_interface/windows/registry_reader_tests.h b/unit_tests/os_interface/windows/registry_reader_tests.h index 23d2587f87..044c6fbde6 100644 --- a/unit_tests/os_interface/windows/registry_reader_tests.h +++ b/unit_tests/os_interface/windows/registry_reader_tests.h @@ -17,6 +17,13 @@ class TestedRegistryReader : public RegistryReader { return igdrclHkeyType; } using RegistryReader::getSetting; + char *getenv(const char *envVar) override { + if (strcmp(envVar, "TestedEnvironmentVariable") == 0) { + return "TestedEnvironmentVariableValue"; + } else { + return nullptr; + } + } const char *getRegKey() const { return registryReadRootKey.c_str(); }