Settings: Fix unittest memory leak, change input types

This commit is contained in:
SmallJoker 2020-09-22 18:40:34 +02:00
parent 55e2dd911b
commit add68369a5
3 changed files with 15 additions and 15 deletions

@ -822,22 +822,22 @@ bool Settings::setDefault(const std::string &name, const std::string &value)
} }
bool Settings::setGroup(const std::string &name, Settings *group) bool Settings::setGroup(const std::string &name, const Settings &group)
{ {
// Settings must own the group pointer // Settings must own the group pointer
// avoid double-free by copying the source // avoid double-free by copying the source
Settings *copy = new Settings(); Settings *copy = new Settings();
*copy = *group; *copy = group;
return setEntry(name, &copy, true, false); return setEntry(name, &copy, true, false);
} }
bool Settings::setGroupDefault(const std::string &name, Settings *group) bool Settings::setGroupDefault(const std::string &name, const Settings &group)
{ {
// Settings must own the group pointer // Settings must own the group pointer
// avoid double-free by copying the source // avoid double-free by copying the source
Settings *copy = new Settings(); Settings *copy = new Settings();
*copy = *group; *copy = group;
return setEntry(name, &copy, true, true); return setEntry(name, &copy, true, true);
} }
@ -1060,7 +1060,7 @@ void Settings::overrideDefaults(Settings *other)
{ {
for (const auto &setting : other->m_settings) { for (const auto &setting : other->m_settings) {
if (setting.second.is_group) { if (setting.second.is_group) {
setGroupDefault(setting.first, setting.second.group); setGroupDefault(setting.first, *setting.second.group);
continue; continue;
} }
const FlagDesc *flagdesc = getFlagDescFallback(setting.first); const FlagDesc *flagdesc = getFlagDescFallback(setting.first);

@ -192,8 +192,8 @@ public:
bool set_group, bool set_default); bool set_group, bool set_default);
bool set(const std::string &name, const std::string &value); bool set(const std::string &name, const std::string &value);
bool setDefault(const std::string &name, const std::string &value); bool setDefault(const std::string &name, const std::string &value);
bool setGroup(const std::string &name, Settings *group); bool setGroup(const std::string &name, const Settings &group);
bool setGroupDefault(const std::string &name, Settings *group); bool setGroupDefault(const std::string &name, const Settings &group);
bool setBool(const std::string &name, bool value); bool setBool(const std::string &name, bool value);
bool setS16(const std::string &name, s16 value); bool setS16(const std::string &name, s16 value);
bool setU16(const std::string &name, u16 value); bool setU16(const std::string &name, u16 value);

@ -149,15 +149,15 @@ void TestSettings::testAllSettings()
UASSERT(group->getS16("a") == 5); UASSERT(group->getS16("a") == 5);
UASSERT(fabs(group->getFloat("bb") - 2.5) < 0.001); UASSERT(fabs(group->getFloat("bb") - 2.5) < 0.001);
Settings *group3 = new Settings; Settings group3;
group3->set("cat", "meow"); group3.set("cat", "meow");
group3->set("dog", "woof"); group3.set("dog", "woof");
Settings *group2 = new Settings; Settings group2;
group2->setS16("num_apples", 4); group2.setS16("num_apples", 4);
group2->setS16("num_oranges", 53); group2.setS16("num_oranges", 53);
group2->setGroup("animals", group3); group2.setGroup("animals", group3);
group2->set("animals", "cute"); //destroys group 3 group2.set("animals", "cute"); //destroys group 3
s.setGroup("groupy_thing", group2); s.setGroup("groupy_thing", group2);
// Test set failure conditions // Test set failure conditions