summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2017-07-12 16:41:28 +0100
committerGitHub <noreply@github.com>2017-07-12 16:41:28 +0100
commit7851faac62d7a83c94cd5d37e0109b5d0a152bf9 (patch)
treea5140013cb0e0d8c1a2f484645a32001a4bc808c /src
parent834c94679b7df475e50d87ccb11311e297a78718 (diff)
parent4b37c612257fa94a790d4698a2660112473599ae (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.cpp19
-rw-r--r--src/configreader.cpp6
-rw-r--r--src/modules/m_httpd_config.cpp4
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 << "&lt;" << 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) << "=&quot;" << Sanitize(j->second) << "&quot; ";
}