forked from Mirrorlandia_minetest/minetest
Settings: Fix unittest memory leak, change input types
This commit is contained in:
parent
55e2dd911b
commit
add68369a5
@ -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, ©, true, false);
|
return setEntry(name, ©, 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, ©, true, true);
|
return setEntry(name, ©, 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
|
||||||
|
Loading…
Reference in New Issue
Block a user