summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h5
-rw-r--r--include/modules.h2
-rw-r--r--src/commands/cmd_motd.cpp2
-rw-r--r--src/commands/cmd_rules.cpp2
-rw-r--r--src/configreader.cpp10
5 files changed, 17 insertions, 4 deletions
diff --git a/include/configreader.h b/include/configreader.h
index 1edacfe13..b01a979a7 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -197,6 +197,9 @@ class CoreExport ServerConfig
ConfigTagList ConfTags(const std::string& tag);
+ /** An empty configuration tag. */
+ ConfigTag* EmptyTag;
+
/** Error stream, contains error output from any failed configuration parsing.
*/
std::stringstream errstr;
@@ -527,6 +530,8 @@ class CoreExport ServerConfig
*/
ServerConfig();
+ ~ServerConfig();
+
/** Get server ID as string with required leading zeroes
*/
const std::string& GetSID();
diff --git a/include/modules.h b/include/modules.h
index eef8c61c9..cd0d5aad0 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -116,7 +116,7 @@ struct ModResult {
* and numerical comparisons in preprocessor macros if they wish to support
* multiple versions of InspIRCd in one file.
*/
-#define INSPIRCD_VERSION_API 8
+#define INSPIRCD_VERSION_API 9
/**
* This #define allows us to call a method in all
diff --git a/src/commands/cmd_motd.cpp b/src/commands/cmd_motd.cpp
index 8e227723e..869a9c353 100644
--- a/src/commands/cmd_motd.cpp
+++ b/src/commands/cmd_motd.cpp
@@ -53,7 +53,7 @@ CmdResult CommandMotd::Handle (const std::vector<std::string>& parameters, User
if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName)
return CMD_SUCCESS;
- ConfigTag* tag = NULL;
+ ConfigTag* tag = ServerInstance->Config->EmptyTag;
if (IS_LOCAL(user))
tag = user->GetClass()->config;
std::string motd_name = tag->getString("motd", "motd");
diff --git a/src/commands/cmd_rules.cpp b/src/commands/cmd_rules.cpp
index 5d41aa4b8..17de9f3f2 100644
--- a/src/commands/cmd_rules.cpp
+++ b/src/commands/cmd_rules.cpp
@@ -51,7 +51,7 @@ CmdResult CommandRules::Handle (const std::vector<std::string>& parameters, User
if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName)
return CMD_SUCCESS;
- ConfigTag* tag = NULL;
+ ConfigTag* tag = ServerInstance->Config->EmptyTag;
if (IS_LOCAL(user))
tag = user->GetClass()->config;
std::string rules_name = tag->getString("rules", "rules");
diff --git a/src/configreader.cpp b/src/configreader.cpp
index 060f66d16..b5d2fdb16 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -48,6 +48,14 @@ ServerConfig::ServerConfig()
OperMaxChans = 30;
c_ipv4_range = 32;
c_ipv6_range = 128;
+
+ std::vector<KeyVal>* items;
+ EmptyTag = ConfigTag::create("empty", "<auto>", 0, items);
+}
+
+ServerConfig::~ServerConfig()
+{
+ delete EmptyTag;
}
void ServerConfig::Update005()
@@ -888,7 +896,7 @@ ConfigTag* ServerConfig::ConfValue(const std::string &tag)
{
ConfigTagList found = config_data.equal_range(tag);
if (found.first == found.second)
- return NULL;
+ return EmptyTag;
ConfigTag* rv = found.first->second;
found.first++;
if (found.first != found.second)