X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fconfigparser.cpp;h=627cd78e19a1961dc89e173ca0a5a557a300e161;hb=8f5952d1e56c9dbefebbacfc7e40546a9df901e8;hp=5feff013f44ee217a896a3f01ca377b966949315;hpb=ccab908f14804776aab4c6728710e89b4847130a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configparser.cpp b/src/configparser.cpp index 5feff013f..627cd78e1 100644 --- a/src/configparser.cpp +++ b/src/configparser.cpp @@ -402,6 +402,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; @@ -496,23 +511,43 @@ long ConfigTag::getInt(const std::string &key, long def, long min, long max) return res; } -long ConfigTag::getDuration(const std::string& key, long def, long min, long max) +unsigned long ConfigTag::getUInt(const std::string& key, unsigned long def, unsigned long min, unsigned long max) +{ + std::string result; + if (!readString(key, result)) + return def; + + const char* res_cstr = result.c_str(); + char* res_tail = NULL; + unsigned long res = strtoul(res_cstr, &res_tail, 0); + if (res_tail == res_cstr) + return def; + + CheckMagnitude(tag, key, result, res, def, res_tail); + CheckRange(tag, key, res, def, min, max); + return res; +} + +unsigned long ConfigTag::getDuration(const std::string& key, unsigned long def, unsigned long min, unsigned long max) { std::string duration; if (!readString(key, duration)) return def; - long ret = InspIRCd::Duration(duration); + unsigned long ret = InspIRCd::Duration(duration); CheckRange(tag, key, ret, def, min, max); 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)