From 402a1bb010522a35600325c1a3084e092b40ca22 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Mon, 6 Oct 2014 13:30:31 +0100 Subject: Fix various warnings when building with LLVM 3.5. - warning: absolute value function 'abs' given an argument of type 'long' but has parameter of type 'int' which may cause truncation of value [-Wabsolute-value] - warning: 'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true [-Wundefined-bool-conversion] --- src/commands/cmd_whois.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/commands') diff --git a/src/commands/cmd_whois.cpp b/src/commands/cmd_whois.cpp index ba2ad9c15..ab0b82fff 100644 --- a/src/commands/cmd_whois.cpp +++ b/src/commands/cmd_whois.cpp @@ -76,7 +76,7 @@ CmdResult CommandWhois::Handle (const std::vector& parameters, User */ if (IS_LOCAL(dest) && (ServerInstance->Config->HideWhoisServer.empty() || parameters.size() > 1)) { - idle = abs((long)((dest->idle_lastmsg)-ServerInstance->Time())); + idle = labs((long)((dest->idle_lastmsg)-ServerInstance->Time())); signon = dest->signon; } -- cgit v1.2.3 From 6935ce2956fed99d5484da90e614b7126e5275d3 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Wed, 8 Oct 2014 16:34:37 +0100 Subject: Avoid calling methods on NULL pointers wherever possible. The trick we use to allow this is undefined behaviour and is not liked by LLVM. We should stop using it but it has the potential to break to many things for a minor release. --- include/configreader.h | 5 +++++ include/modules.h | 2 +- src/commands/cmd_motd.cpp | 2 +- src/commands/cmd_rules.cpp | 2 +- src/configreader.cpp | 10 +++++++++- 5 files changed, 17 insertions(+), 4 deletions(-) (limited to 'src/commands') 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& 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& 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* items; + EmptyTag = ConfigTag::create("empty", "", 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) -- cgit v1.2.3