diff options
author | Peter Powell <petpow@saberuk.com> | 2017-07-12 16:41:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-12 16:41:28 +0100 |
commit | 7851faac62d7a83c94cd5d37e0109b5d0a152bf9 (patch) | |
tree | a5140013cb0e0d8c1a2f484645a32001a4bc808c /src | |
parent | 834c94679b7df475e50d87ccb11311e297a78718 (diff) | |
parent | 4b37c612257fa94a790d4698a2660112473599ae (diff) |
Merge pull request #1267 from SaberUK/master+config
Store config values in a map instead of a unique vector of pairs.
Diffstat (limited to 'src')
-rw-r--r-- | src/configparser.cpp | 19 | ||||
-rw-r--r-- | src/configreader.cpp | 6 | ||||
-rw-r--r-- | src/modules/m_httpd_config.cpp | 4 |
3 files changed, 14 insertions, 15 deletions
diff --git a/src/configparser.cpp b/src/configparser.cpp index 8bf9aaec2..7c03fe58a 100644 --- a/src/configparser.cpp +++ b/src/configparser.cpp @@ -91,7 +91,7 @@ struct Parser unget(ch); } - bool kv(std::vector<KeyVal>* items, std::set<std::string>& seen) + bool kv(ConfigItems* items) { std::string key; nextword(key); @@ -177,10 +177,10 @@ struct Parser value.push_back(ch); } - if (!seen.insert(key).second) + if (items->find(key) != items->end()) throw CoreException("Duplicate key '" + key + "' found"); - items->push_back(KeyVal(key, value)); + (*items)[key] = value; return true; } @@ -199,11 +199,10 @@ struct Parser if (name.empty()) throw CoreException("Empty tag name"); - std::vector<KeyVal>* items; - std::set<std::string> seen; + ConfigItems* items; tag = ConfigTag::create(name, current.filename, current.line, items); - while (kv(items, seen)) + while (kv(items)) { // Do nothing here (silences a GCC warning). } @@ -220,14 +219,14 @@ struct Parser } else if (name == "files") { - for(std::vector<KeyVal>::iterator i = items->begin(); i != items->end(); i++) + for(ConfigItems::iterator i = items->begin(); i != items->end(); i++) { stack.DoReadFile(i->first, i->second, flags, false); } } else if (name == "execfiles") { - for(std::vector<KeyVal>::iterator i = items->begin(); i != items->end(); i++) + for(ConfigItems::iterator i = items->begin(); i != items->end(); i++) { stack.DoReadFile(i->first, i->second, flags, true); } @@ -385,7 +384,7 @@ bool ParseStack::ParseFile(const std::string& path, int flags, const std::string bool ConfigTag::readString(const std::string& key, std::string& value, bool allow_lf) { - for(std::vector<KeyVal>::iterator j = items.begin(); j != items.end(); ++j) + for(ConfigItems::iterator j = items.begin(); j != items.end(); ++j) { if(j->first != key) continue; @@ -488,7 +487,7 @@ std::string ConfigTag::getTagLocation() return src_name + ":" + ConvToStr(src_line); } -ConfigTag* ConfigTag::create(const std::string& Tag, const std::string& file, int line, std::vector<KeyVal>*& Items) +ConfigTag* ConfigTag::create(const std::string& Tag, const std::string& file, int line, ConfigItems*& Items) { ConfigTag* rv = new ConfigTag(Tag, file, line); Items = &rv->items; diff --git a/src/configreader.cpp b/src/configreader.cpp index 9d327532b..8263b8737 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -46,7 +46,7 @@ ServerLimits::ServerLimits(ConfigTag* tag) static ConfigTag* CreateEmptyTag() { - std::vector<KeyVal>* items; + ConfigItems* items; return ConfigTag::create("empty", "<auto>", 0, items); } @@ -220,9 +220,9 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current) if (blk_count == 0) { // No connect blocks found; make a trivial default block - std::vector<KeyVal>* items; + ConfigItems* items; ConfigTag* tag = ConfigTag::create("connect", "<auto>", 0, items); - items->push_back(std::make_pair("allow", "*")); + (*items)["allow"] = "*"; config_data.insert(std::make_pair("connect", tag)); blk_count = 1; } diff --git a/src/modules/m_httpd_config.cpp b/src/modules/m_httpd_config.cpp index 6fd7f4050..11c82c031 100644 --- a/src/modules/m_httpd_config.cpp +++ b/src/modules/m_httpd_config.cpp @@ -81,8 +81,8 @@ class ModuleHttpConfig : public Module, public HTTPRequestEventListener for (ConfigDataHash::iterator x = ServerInstance->Config->config_data.begin(); x != ServerInstance->Config->config_data.end(); ++x) { data << "<" << x->first << " "; - ConfigTag* tag = x->second; - for (std::vector<KeyVal>::const_iterator j = tag->getItems().begin(); j != tag->getItems().end(); j++) + const ConfigItems& items = x->second->getItems(); + for (ConfigItems::const_iterator j = items.begin(); j != items.end(); j++) { data << Sanitize(j->first) << "="" << Sanitize(j->second) << "" "; } |