Correct reading binary values from registry
Change-Id: I9cbbaaebb3b656314c4b44eea454fe19248f16b7 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
parent
b38b67f9dc
commit
37b7d1ebd6
|
@ -54,6 +54,17 @@ LSTATUS APIENTRY RegQueryValueExA(
|
||||||
} else {
|
} else {
|
||||||
*lpcbData = sizeof(DWORD);
|
*lpcbData = sizeof(DWORD);
|
||||||
}
|
}
|
||||||
|
} else if (strcmp(lpValueName, "settingSourceBinary") == 0) {
|
||||||
|
const auto settingSource = L"registry";
|
||||||
|
auto size = wcslen(settingSource) * sizeof(wchar_t);
|
||||||
|
if (lpData) {
|
||||||
|
memcpy(reinterpret_cast<wchar_t *>(lpData), settingSource, size);
|
||||||
|
} else {
|
||||||
|
*lpcbData = static_cast<DWORD>(size);
|
||||||
|
if (lpType) {
|
||||||
|
*lpType = REG_BINARY;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,4 +120,29 @@ TEST_F(DebugReaderWithRegistryAndEnvTest, givenStringDebugKeyWhenOpenKeyFailsThe
|
||||||
regQueryValueSuccessCount = 0u;
|
regQueryValueSuccessCount = 0u;
|
||||||
|
|
||||||
EXPECT_STREQ("environment", registryReader.getSetting("settingSourceString", defaultValue).c_str());
|
EXPECT_STREQ("environment", registryReader.getSetting("settingSourceString", defaultValue).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(DebugReaderWithRegistryAndEnvTest, givenBinaryDebugKeyWhenReadFromRegistrySucceedsThenReturnObtainedValue) {
|
||||||
|
std::string defaultValue("default");
|
||||||
|
regOpenKeySuccessCount = 1u;
|
||||||
|
regQueryValueSuccessCount = 2u;
|
||||||
|
|
||||||
|
EXPECT_STREQ("registry", registryReader.getSetting("settingSourceBinary", defaultValue).c_str());
|
||||||
|
}
|
||||||
|
TEST_F(DebugReaderWithRegistryAndEnvTest, givenBinaryDebugKeyOnlyInRegistryWhenReadFromRegistryFailsThenReturnDefaultValue) {
|
||||||
|
std::string defaultValue("default");
|
||||||
|
regOpenKeySuccessCount = 1u;
|
||||||
|
regQueryValueSuccessCount = 1u;
|
||||||
|
|
||||||
|
EXPECT_STREQ("default", registryReader.getSetting("settingSourceBinary", defaultValue).c_str());
|
||||||
|
|
||||||
|
regOpenKeySuccessCount = 1u;
|
||||||
|
regQueryValueSuccessCount = 0u;
|
||||||
|
|
||||||
|
EXPECT_STREQ("default", registryReader.getSetting("settingSourceBinary", defaultValue).c_str());
|
||||||
|
|
||||||
|
regOpenKeySuccessCount = 0u;
|
||||||
|
regQueryValueSuccessCount = 0u;
|
||||||
|
|
||||||
|
EXPECT_STREQ("default", registryReader.getSetting("settingSourceBinary", defaultValue).c_str());
|
||||||
}
|
}
|
|
@ -116,7 +116,8 @@ std::string RegistryReader::getSetting(const char *settingName, const std::strin
|
||||||
readSettingFromEnv = false;
|
readSettingFromEnv = false;
|
||||||
}
|
}
|
||||||
} else if (regType == REG_BINARY) {
|
} else if (regType == REG_BINARY) {
|
||||||
auto regData = std::make_unique<wchar_t[]>(regSize);
|
size_t charCount = regSize / sizeof(wchar_t);
|
||||||
|
auto regData = std::make_unique<wchar_t[]>(charCount);
|
||||||
success = RegQueryValueExA(Key,
|
success = RegQueryValueExA(Key,
|
||||||
settingName,
|
settingName,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -125,10 +126,10 @@ std::string RegistryReader::getSetting(const char *settingName, const std::strin
|
||||||
®Size);
|
®Size);
|
||||||
|
|
||||||
if (ERROR_SUCCESS == success) {
|
if (ERROR_SUCCESS == success) {
|
||||||
size_t charsConverted = 0;
|
|
||||||
auto convertedData = std::make_unique<char[]>(regSize);
|
|
||||||
|
|
||||||
wcstombs_s(&charsConverted, convertedData.get(), regSize, regData.get(), regSize);
|
std::unique_ptr<char[]> convertedData(new char[charCount + 1]);
|
||||||
|
std::wcstombs(convertedData.get(), regData.get(), charCount);
|
||||||
|
convertedData.get()[charCount] = 0;
|
||||||
|
|
||||||
keyValue.assign(convertedData.get());
|
keyValue.assign(convertedData.get());
|
||||||
readSettingFromEnv = false;
|
readSettingFromEnv = false;
|
||||||
|
|
Loading…
Reference in New Issue