]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configparser.cpp
Remove deprecated config checker and make <die> actually useful.
[user/henk/code/inspircd.git] / src / configparser.cpp
index 5ee86c81178c49acd128ac940ae02aedc05757dc..437b3cdb0c3822a8ad8691d3f50db8b14ce68f51 100644 (file)
@@ -213,25 +213,25 @@ struct Parser
                        mandatory_tag.clear();
                }
 
-               if (name == "include")
+               if (stdalgo::string::equalsci(name, "include"))
                {
                        stack.DoInclude(tag, flags);
                }
-               else if (name == "files")
+               else if (stdalgo::string::equalsci(name, "files"))
                {
                        for(ConfigItems::iterator i = items->begin(); i != items->end(); i++)
                        {
                                stack.DoReadFile(i->first, i->second, flags, false);
                        }
                }
-               else if (name == "execfiles")
+               else if (stdalgo::string::equalsci(name, "execfiles"))
                {
                        for(ConfigItems::iterator i = items->begin(); i != items->end(); i++)
                        {
                                stack.DoReadFile(i->first, i->second, flags, true);
                        }
                }
-               else if (name == "define")
+               else if (stdalgo::string::equalsci(name, "define"))
                {
                        if (flags & FLAG_USE_COMPAT)
                                throw CoreException("<define> tags may only be used in XML-style config (add <config format=\"xml\">)");
@@ -241,12 +241,12 @@ struct Parser
                                throw CoreException("Variable definition must include variable name");
                        stack.vars[varname] = value;
                }
-               else if (name == "config")
+               else if (stdalgo::string::equalsci(name, "config"))
                {
                        std::string format = tag->getString("format");
-                       if (format == "xml")
+                       if (stdalgo::string::equalsci(format, "xml"))
                                flags &= ~FLAG_USE_COMPAT;
-                       else if (format == "compat")
+                       else if (stdalgo::string::equalsci(format, "compat"))
                                flags |= FLAG_USE_COMPAT;
                        else if (!format.empty())
                                throw CoreException("Unknown configuration format " + format);
@@ -286,7 +286,8 @@ struct Parser
                                                break;
                                        case 0xFE:
                                        case 0xFF:
-                                               stack.errstr << "Do not save your files as UTF-16; use ASCII!\n";
+                                               stack.errstr << "Do not save your files as UTF-16 or UTF-32, use UTF-8!\n";
+                                               /*@fallthrough@*/
                                        default:
                                                throw CoreException("Syntax error - start of tag expected");
                                }
@@ -402,6 +403,21 @@ bool ConfigTag::readString(const std::string& key, std::string& value, bool allo
        return false;
 }
 
+std::string ConfigTag::getString(const std::string& key, const std::string& def, const TR1NS::function<bool(const std::string&)>& validator)
+{
+       std::string res;
+       if (!readString(key, res))
+               return def;
+
+       if (!validator(res))
+       {
+               ServerInstance->Logs->Log("CONFIG", LOG_DEFAULT, "WARNING: The value of <%s:%s> is not valid; value set to %s.",
+                       tag.c_str(), key.c_str(), def.c_str());
+               return def;
+       }
+       return res;
+}
+
 std::string ConfigTag::getString(const std::string& key, const std::string& def, size_t minlen, size_t maxlen)
 {
        std::string res;
@@ -524,12 +540,15 @@ unsigned long ConfigTag::getDuration(const std::string& key, unsigned long def,
        return ret;
 }
 
-double ConfigTag::getFloat(const std::string &key, double def)
+double ConfigTag::getFloat(const std::string& key, double def, double min, double max)
 {
        std::string result;
        if (!readString(key, result))
                return def;
-       return strtod(result.c_str(), NULL);
+
+       double res = strtod(result.c_str(), NULL);
+       CheckRange(tag, key, res, def, min, max);
+       return res;
 }
 
 bool ConfigTag::getBool(const std::string &key, bool def)