]> git.lizzy.rs Git - minetest.git/commitdiff
Settings: Fix unittest memory leak, change input types
authorSmallJoker <mk939@ymail.com>
Tue, 22 Sep 2020 16:40:34 +0000 (18:40 +0200)
committerSmallJoker <mk939@ymail.com>
Tue, 22 Sep 2020 17:05:04 +0000 (19:05 +0200)
src/settings.cpp
src/settings.h
src/unittest/test_settings.cpp

index 473a216bf3141852c407682be095353b996f0693..28b72c4e3d1ac6c0797de723fe6d5c900641a7c9 100644 (file)
@@ -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
        // avoid double-free by copying the source
        Settings *copy = new Settings();
-       *copy = *group;
+       *copy = group;
        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
        // avoid double-free by copying the source
        Settings *copy = new Settings();
-       *copy = *group;
+       *copy = group;
        return setEntry(name, &copy, true, true);
 }
 
@@ -1060,7 +1060,7 @@ void Settings::overrideDefaults(Settings *other)
 {
        for (const auto &setting : other->m_settings) {
                if (setting.second.is_group) {
-                       setGroupDefault(setting.first, setting.second.group);
+                       setGroupDefault(setting.first, *setting.second.group);
                        continue;
                }
                const FlagDesc *flagdesc = getFlagDescFallback(setting.first);
index 0c9a155db4f0ac258259166a13f8a3311490db65..ccc25204973c162923d4d8063818c821dc3a1ae8 100644 (file)
@@ -192,8 +192,8 @@ class Settings {
                bool set_group, bool set_default);
        bool set(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 setGroupDefault(const std::string &name, Settings *group);
+       bool setGroup(const std::string &name, const Settings &group);
+       bool setGroupDefault(const std::string &name, const Settings &group);
        bool setBool(const std::string &name, bool value);
        bool setS16(const std::string &name, s16 value);
        bool setU16(const std::string &name, u16 value);
index aa56f3e06b8deadefbdf3ec327cde5e9759961a8..f91ba5b670d5006d5f01c803aba3d2d6af34e941 100644 (file)
@@ -149,15 +149,15 @@ void TestSettings::testAllSettings()
        UASSERT(group->getS16("a") == 5);
        UASSERT(fabs(group->getFloat("bb") - 2.5) < 0.001);
 
-       Settings *group3 = new Settings;
-       group3->set("cat", "meow");
-       group3->set("dog", "woof");
-
-       Settings *group2 = new Settings;
-       group2->setS16("num_apples", 4);
-       group2->setS16("num_oranges", 53);
-       group2->setGroup("animals", group3);
-       group2->set("animals", "cute"); //destroys group 3
+       Settings group3;
+       group3.set("cat", "meow");
+       group3.set("dog", "woof");
+
+       Settings group2;
+       group2.setS16("num_apples", 4);
+       group2.setS16("num_oranges", 53);
+       group2.setGroup("animals", group3);
+       group2.set("animals", "cute"); //destroys group 3
        s.setGroup("groupy_thing", group2);
 
        // Test set failure conditions