diff --git a/src/layer/layer_settings_manager.cpp b/src/layer/layer_settings_manager.cpp index 85d7581..a38a631 100644 --- a/src/layer/layer_settings_manager.cpp +++ b/src/layer/layer_settings_manager.cpp @@ -58,9 +58,19 @@ static std::string GetEnvironment(const char *variable) { result = GetAndroidProperty("debug.vulkan.screenshot"); } return result; +#elif defined(_WIN32) + auto size = GetEnvironmentVariableA(variable, NULL, 0); + if (size == 0) { + return ""; + } + char *buffer = new char[size]; + GetEnvironmentVariableA(variable, buffer, size); + std::string output = buffer; + delete[] buffer; + return output; #else const char *output = std::getenv(variable); - return output == NULL ? "" : output; + return output == nullptr ? "" : output; #endif } diff --git a/src/layer/layer_settings_util.cpp b/src/layer/layer_settings_util.cpp index 08ca78b..a3753af 100644 --- a/src/layer/layer_settings_util.cpp +++ b/src/layer/layer_settings_util.cpp @@ -202,9 +202,9 @@ int32_t ToInt32(const std::string &token) { int64_t ToInt64(const std::string &token) { int64_t int_id = 0; if (token.find("0x") == 0 || token.find("0X") == 0 || token.find("-0x") == 0 || token.find("-0X") == 0) { // Handle hex format - int_id = static_cast(std::strtoll(token.c_str(), nullptr, 16)); + int_id = static_cast(std::strtoll(token.c_str(), nullptr, 16)); } else { - int_id = static_cast(std::strtoll(token.c_str(), nullptr, 10)); // Decimal format + int_id = static_cast(std::strtoll(token.c_str(), nullptr, 10)); // Decimal format } return int_id; } diff --git a/src/layer/vk_layer_settings.cpp b/src/layer/vk_layer_settings.cpp index 4cee3a5..9889bce 100644 --- a/src/layer/vk_layer_settings.cpp +++ b/src/layer/vk_layer_settings.cpp @@ -11,6 +11,7 @@ #include "layer_settings_manager.hpp" #include +#include #include #include #include @@ -222,7 +223,16 @@ VkResult vkuGetLayerSettingValues(VkuLayerSettingSet layerSettingSet, const char for (std::size_t i = 0, n = values.size(); i < n; ++i) { const std::string &setting_value = vl::ToLower(settings[i]); if (vl::IsInteger(setting_value)) { - values[i] = std::atoll(setting_value.c_str()); + int64_t setting{}; + + if (std::from_chars(setting_value.data(), setting_value.data() + setting_value.size(), setting).ec == + std::errc()) { + values[i] = setting; + } else { + const std::string &message = + vl::FormatString("The data provided (%s) is not an INT64 value.", setting_value.c_str()); + layer_setting_set->Log(pSettingName, message.c_str()); + } } else { const std::string &message = vl::FormatString("The data provided (%s) is not an integer value.", setting_value.c_str()); @@ -267,7 +277,16 @@ VkResult vkuGetLayerSettingValues(VkuLayerSettingSet layerSettingSet, const char for (std::size_t i = 0, n = values.size(); i < n; ++i) { const std::string &setting_value = vl::ToLower(settings[i]); if (vl::IsInteger(setting_value)) { - values[i] = std::atoi(setting_value.c_str()); + uint32_t setting{}; + + if (std::from_chars(setting_value.data(), setting_value.data() + setting_value.size(), setting).ec == + std::errc()) { + values[i] = setting; + } else { + const std::string &message = + vl::FormatString("The data provided (%s) is not a UINT32 value.", setting_value.c_str()); + layer_setting_set->Log(pSettingName, message.c_str()); + } } else { const std::string &message = vl::FormatString("The data provided (%s) is not an integer value.", setting_value.c_str()); @@ -312,7 +331,16 @@ VkResult vkuGetLayerSettingValues(VkuLayerSettingSet layerSettingSet, const char for (std::size_t i = 0, n = values.size(); i < n; ++i) { const std::string &setting_value = vl::ToLower(settings[i]); if (vl::IsInteger(setting_value)) { - values[i] = std::atoll(setting_value.c_str()); + uint64_t setting{}; + + if (std::from_chars(setting_value.data(), setting_value.data() + setting_value.size(), setting).ec == + std::errc()) { + values[i] = setting; + } else { + const std::string &message = + vl::FormatString("The data provided (%s) is not a UINT64 value.", setting_value.c_str()); + layer_setting_set->Log(pSettingName, message.c_str()); + } } else { const std::string &message = vl::FormatString("The data provided (%s) is not an integer value.", setting_value.c_str());