X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fconfigparser.cpp;h=437b3cdb0c3822a8ad8691d3f50db8b14ce68f51;hb=ea7eb543cbbc9d42def708f271ff00e524094a59;hp=5ee86c81178c49acd128ac940ae02aedc05757dc;hpb=780dda83ba3857bc3c330d4b5d38bb251a9d879b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configparser.cpp b/src/configparser.cpp index 5ee86c811..437b3cdb0 100644 --- a/src/configparser.cpp +++ b/src/configparser.cpp @@ -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(" tags may only be used in XML-style config (add )"); @@ -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& 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)