mirror of https://github.com/RPCS3/rpcs3.git
Improve error handling of config nodes
These conditions are most likely only gonna be met during development
This commit is contained in:
parent
ef3e8d26ce
commit
1c6003acd5
|
@ -3,6 +3,8 @@
|
||||||
#include "config_adapter.h"
|
#include "config_adapter.h"
|
||||||
#include "Emu/system_config.h"
|
#include "Emu/system_config.h"
|
||||||
|
|
||||||
|
LOG_CHANNEL(cfg_log, "CFG");
|
||||||
|
|
||||||
// Helper methods to interact with YAML and the config settings.
|
// Helper methods to interact with YAML and the config settings.
|
||||||
namespace cfg_adapter
|
namespace cfg_adapter
|
||||||
{
|
{
|
||||||
|
@ -29,7 +31,18 @@ namespace cfg_adapter
|
||||||
|
|
||||||
YAML::Node get_node(const YAML::Node& node, cfg_location::const_iterator begin, cfg_location::const_iterator end)
|
YAML::Node get_node(const YAML::Node& node, cfg_location::const_iterator begin, cfg_location::const_iterator end)
|
||||||
{
|
{
|
||||||
return begin == end ? node : get_node(node[*begin], begin + 1, end); // TODO
|
if (begin == end)
|
||||||
|
{
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!node || !node.IsMap())
|
||||||
|
{
|
||||||
|
cfg_log.fatal("Node error. A cfg_location does not match its cfg::node");
|
||||||
|
return YAML::Node();
|
||||||
|
}
|
||||||
|
|
||||||
|
return get_node(node[*begin], begin + 1, end); // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
YAML::Node get_node(const YAML::Node& node, cfg_location loc)
|
YAML::Node get_node(const YAML::Node& node, cfg_location loc)
|
||||||
|
|
|
@ -500,12 +500,24 @@ QStringList emu_settings::GetSettingOptions(emu_settings_type type) const
|
||||||
|
|
||||||
std::string emu_settings::GetSettingDefault(emu_settings_type type) const
|
std::string emu_settings::GetSettingDefault(emu_settings_type type) const
|
||||||
{
|
{
|
||||||
return cfg_adapter::get_node(m_defaultSettings, settings_location[type]).Scalar();
|
if (auto node = cfg_adapter::get_node(m_defaultSettings, settings_location[type]); node && node.IsScalar())
|
||||||
|
{
|
||||||
|
return node.Scalar();
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg_log.fatal("GetSettingDefault(type=%d) could not retrieve the requested node", static_cast<int>(type));
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string emu_settings::GetSetting(emu_settings_type type) const
|
std::string emu_settings::GetSetting(emu_settings_type type) const
|
||||||
{
|
{
|
||||||
return cfg_adapter::get_node(m_currentSettings, settings_location[type]).Scalar();
|
if (auto node = cfg_adapter::get_node(m_currentSettings, settings_location[type]); node && node.IsScalar())
|
||||||
|
{
|
||||||
|
return node.Scalar();
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg_log.fatal("GetSetting(type=%d) could not retrieve the requested node", static_cast<int>(type));
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
void emu_settings::SetSetting(emu_settings_type type, const std::string& val)
|
void emu_settings::SetSetting(emu_settings_type type, const std::string& val)
|
||||||
|
|
Loading…
Reference in New Issue