summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2012-01-25 15:48:07 -0500
committerAdam <Adam@anope.org>2012-01-25 15:48:07 -0500
commit52eaa7d6d61e3373340fd5a69b92b0fb3b5609e0 (patch)
tree428f2b440ab5675ae3a9c19ae5b813f132497c79
parente88e37c59b45cc43b714d1d28719eb3c2ca9579a (diff)
Windows
-rw-r--r--include/access.h2
-rw-r--r--include/commands.h2
-rw-r--r--include/modules.h7
-rw-r--r--include/oper.h2
-rw-r--r--include/services.h43
-rw-r--r--modules/commands/bs_badwords.cpp10
-rw-r--r--modules/commands/cs_access.cpp2
-rw-r--r--modules/commands/cs_flags.cpp2
-rw-r--r--modules/commands/cs_log.cpp2
-rw-r--r--modules/commands/cs_saset.cpp2
-rw-r--r--modules/commands/cs_set.cpp2
-rw-r--r--modules/commands/cs_xop.cpp2
-rw-r--r--modules/commands/help.cpp4
-rw-r--r--modules/commands/ns_saset.cpp2
-rw-r--r--modules/commands/ns_set.cpp2
-rw-r--r--modules/commands/os_akill.cpp2
-rw-r--r--modules/commands/os_chankill.cpp2
-rw-r--r--modules/commands/os_defcon.cpp4
-rw-r--r--modules/commands/os_forbid.cpp48
-rw-r--r--modules/commands/os_forbid.h6
-rw-r--r--modules/commands/os_ignore.h6
-rw-r--r--modules/commands/os_modinfo.cpp4
-rw-r--r--modules/commands/os_news.cpp26
-rw-r--r--modules/commands/os_news.h6
-rw-r--r--modules/commands/os_oper.cpp6
-rw-r--r--modules/commands/os_session.cpp4
-rw-r--r--modules/commands/os_session.h6
-rw-r--r--modules/commands/os_stats.cpp2
-rw-r--r--modules/commands/os_sxline.cpp4
-rw-r--r--modules/database/db_old.cpp29
-rw-r--r--modules/database/db_plain.cpp4
-rw-r--r--modules/database/db_sql.cpp6
-rw-r--r--modules/database/db_sql_live_read.cpp6
-rw-r--r--modules/database/db_sql_live_write.cpp6
-rw-r--r--modules/extra/ldap.h4
-rw-r--r--modules/extra/m_dnsbl.cpp2
-rw-r--r--modules/extra/m_ldap.cpp4
-rw-r--r--modules/extra/m_ldap_authentication.cpp4
-rw-r--r--modules/extra/m_ldap_oper.cpp4
-rw-r--r--modules/extra/m_proxyscan.cpp2
-rw-r--r--modules/extra/m_xmlrpc.cpp4
-rw-r--r--modules/extra/m_xmlrpc_main.cpp4
-rw-r--r--modules/extra/sql.h4
-rw-r--r--modules/extra/ssl.h4
-rw-r--r--modules/extra/xmlrpc.h4
-rw-r--r--modules/pseudoclients/global.h6
-rw-r--r--modules/pseudoclients/memoserv.h6
-rw-r--r--modules/pseudoclients/nickserv.h6
-rw-r--r--src/access.cpp4
-rw-r--r--src/base.cpp2
-rw-r--r--src/bots.cpp2
-rw-r--r--src/command.cpp2
-rw-r--r--src/operserv.cpp4
53 files changed, 175 insertions, 160 deletions
diff --git a/include/access.h b/include/access.h
index 8f36b68d0..8b380895d 100644
--- a/include/access.h
+++ b/include/access.h
@@ -30,7 +30,7 @@ class CoreExport PrivilegeManager
class ChanAccess;
-class CoreExport AccessProvider : public Service<AccessProvider>
+class CoreExport AccessProvider : public Service
{
public:
AccessProvider(Module *o, const Anope::string &n);
diff --git a/include/commands.h b/include/commands.h
index d73e20017..c0812620f 100644
--- a/include/commands.h
+++ b/include/commands.h
@@ -58,7 +58,7 @@ struct CoreExport CommandSource
/** Every services command is a class, inheriting from Command.
*/
-class CoreExport Command : public Service<Command>, public Flags<CommandFlag>
+class CoreExport Command : public Service, public Flags<CommandFlag>
{
Anope::string desc;
std::vector<Anope::string> syntax;
diff --git a/include/modules.h b/include/modules.h
index c4a6c8f62..d251be353 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -1123,13 +1123,14 @@ class CallBack : public Timer
}
};
-template<typename T, typename U = T>
+template<typename T>
class service_reference : public dynamic_reference<T>
{
+ Anope::string type;
Anope::string name;
public:
- service_reference(const Anope::string &n) : dynamic_reference<T>(NULL), name(n)
+ service_reference(const Anope::string &t, const Anope::string &n) : dynamic_reference<T>(NULL), type(t), name(n)
{
}
@@ -1147,7 +1148,7 @@ class service_reference : public dynamic_reference<T>
}
if (!this->ref)
{
- this->ref = static_cast<T *>(Service<U>::FindService(this->name));
+ this->ref = static_cast<T *>(Service::FindService(this->type, this->name));
if (this->ref)
this->ref->AddReference(this);
}
diff --git a/include/oper.h b/include/oper.h
index 8eb1719bf..1a82a8530 100644
--- a/include/oper.h
+++ b/include/oper.h
@@ -36,7 +36,7 @@ class CoreExport XLine : public Serializable
static void unserialize(serialized_data &data);
};
-class CoreExport XLineManager : public Service<XLineManager>
+class CoreExport XLineManager : public Service
{
char type;
/* List of XLines in this XLineManager */
diff --git a/include/services.h b/include/services.h
index cd15fed68..37b8df1ad 100644
--- a/include/services.h
+++ b/include/services.h
@@ -306,30 +306,38 @@ template<typename T, size_t Size = 32> class Flags
class Module;
-template<typename T> class Service : public Base
+class CoreExport Service : public Base
{
- static Anope::map<T *> services;
+ static Anope::map<Anope::map<Service *> > services;
public:
- static T* FindService(const Anope::string &n)
+ static Service *FindService(const Anope::string &t, const Anope::string &n)
{
- typename Anope::map<T *>::iterator it = Service<T>::services.find(n);
- if (it != Service<T>::services.end())
- return it->second;
+ Anope::map<Anope::map<Service *> >::iterator it = services.find(t);
+ if (it != services.end())
+ {
+ Anope::map<Service *>::iterator it2 = it->second.find(n);
+ if (it2 != it->second.end())
+ return it2->second;
+ }
+
return NULL;
}
- static std::vector<Anope::string> GetServiceKeys()
+ static std::vector<Anope::string> GetServiceKeys(const Anope::string &t)
{
std::vector<Anope::string> keys;
- for (typename Anope::map<T *>::iterator it = Service<T>::services.begin(), it_end = Service<T>::services.end(); it != it_end; ++it)
- keys.push_back(it->first);
+ Anope::map<Anope::map<Service *> >::iterator it = services.find(t);
+ if (it != services.end())
+ for (Anope::map<Service *>::iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2)
+ keys.push_back(it2->first);
return keys;
}
Module *owner;
+ Anope::string type;
Anope::string name;
- Service(Module *o, const Anope::string &n) : owner(o), name(n)
+ Service(Module *o, const Anope::string &t, const Anope::string &n) : owner(o), type(t), name(n)
{
this->Register();
}
@@ -341,19 +349,20 @@ template<typename T> class Service : public Base
void Register()
{
- if (Service<T>::services.find(this->name) != Service<T>::services.end())
- throw ModuleException("Service with name " + this->name + " already exists");
- Service<T>::services[this->name] = static_cast<T *>(this);
+ Anope::map<Service *> &smap = services[this->type];
+ if (smap.find(this->name) != smap.end())
+ throw ModuleException("Service " + this->type + " with name " + this->name + " already exists");
+ smap[this->name] = this;
}
void Unregister()
{
- Service<T>::services.erase(this->name);
+ Anope::map<Service *> &smap = services[this->type];
+ smap.erase(this->name);
+ if (smap.empty())
+ services.erase(this->type);
}
};
-template<typename T> Anope::map<T *> Service<T>::services;
-
-template class Service<Base>;
#include "sockets.h"
#include "socketengine.h"
diff --git a/modules/commands/bs_badwords.cpp b/modules/commands/bs_badwords.cpp
index 8b92377c7..a700fa6c9 100644
--- a/modules/commands/bs_badwords.cpp
+++ b/modules/commands/bs_badwords.cpp
@@ -128,7 +128,7 @@ class CommandBSBadwords : public Command
void DoAdd(CommandSource &source, ChannelInfo *ci, const Anope::string &word)
{
size_t pos = word.rfind(' ');
- BadWordType type = BW_ANY;
+ BadWordType bwtype = BW_ANY;
Anope::string realword = word;
if (pos != Anope::string::npos)
@@ -137,11 +137,11 @@ class CommandBSBadwords : public Command
if (!opt.empty())
{
if (opt.equals_ci("SINGLE"))
- type = BW_SINGLE;
+ bwtype = BW_SINGLE;
else if (opt.equals_ci("START"))
- type = BW_START;
+ bwtype = BW_START;
else if (opt.equals_ci("END"))
- type = BW_END;
+ bwtype = BW_END;
}
realword = word.substr(0, pos);
}
@@ -165,7 +165,7 @@ class CommandBSBadwords : public Command
bool override = !ci->AccessFor(source.u).HasPriv("BADWORDS");
Log(override ? LOG_OVERRIDE : LOG_COMMAND, source.u, this, ci) << "ADD " << realword;
- ci->AddBadWord(realword, type);
+ ci->AddBadWord(realword, bwtype);
source.Reply(_("\002%s\002 added to %s bad words list."), realword.c_str(), ci->name.c_str());
diff --git a/modules/commands/cs_access.cpp b/modules/commands/cs_access.cpp
index ae1a848c9..3c36fabbd 100644
--- a/modules/commands/cs_access.cpp
+++ b/modules/commands/cs_access.cpp
@@ -148,7 +148,7 @@ class CommandCSAccess : public Command
return;
}
- service_reference<AccessProvider> provider("access/access");
+ service_reference<AccessProvider> provider("AccessProvider", "access/access");
if (!provider)
return;
AccessChanAccess *access = debug_cast<AccessChanAccess *>(provider->Create());
diff --git a/modules/commands/cs_flags.cpp b/modules/commands/cs_flags.cpp
index 811730e27..0e48f59c7 100644
--- a/modules/commands/cs_flags.cpp
+++ b/modules/commands/cs_flags.cpp
@@ -184,7 +184,7 @@ class CommandCSFlags : public Command
return;
}
- service_reference<AccessProvider> provider("access/flags");
+ service_reference<AccessProvider> provider("AccessProvider", "access/flags");
if (!provider)
return;
FlagsChanAccess *access = debug_cast<FlagsChanAccess *>(provider->Create());
diff --git a/modules/commands/cs_log.cpp b/modules/commands/cs_log.cpp
index a94608b4c..35f8831e6 100644
--- a/modules/commands/cs_log.cpp
+++ b/modules/commands/cs_log.cpp
@@ -88,7 +88,7 @@ public:
return;
}
- service_reference<Command> c_service(bi->commands[command_name].name);
+ service_reference<Command> c_service("Command", bi->commands[command_name].name);
if (!c_service)
{
source.Reply(_("%s is not a valid command."), command.c_str());
diff --git a/modules/commands/cs_saset.cpp b/modules/commands/cs_saset.cpp
index ad0df3d76..3290e7cc3 100644
--- a/modules/commands/cs_saset.cpp
+++ b/modules/commands/cs_saset.cpp
@@ -43,7 +43,7 @@ class CommandCSSASet : public Command
CommandInfo &info = it->second;
if (c_name.find_ci(this_name + " ") == 0)
{
- service_reference<Command> command(info.name);
+ service_reference<Command> command("Command", info.name);
if (command)
{
source.command = it->first;
diff --git a/modules/commands/cs_set.cpp b/modules/commands/cs_set.cpp
index e76164332..9a63c8335 100644
--- a/modules/commands/cs_set.cpp
+++ b/modules/commands/cs_set.cpp
@@ -43,7 +43,7 @@ class CommandCSSet : public Command
CommandInfo &info = it->second;
if (c_name.find_ci(this_name + " ") == 0)
{
- service_reference<Command> command(info.name);
+ service_reference<Command> command("Command", info.name);
if (command)
{
source.command = it->first;
diff --git a/modules/commands/cs_xop.cpp b/modules/commands/cs_xop.cpp
index 58fd99ba2..39789bf89 100644
--- a/modules/commands/cs_xop.cpp
+++ b/modules/commands/cs_xop.cpp
@@ -251,7 +251,7 @@ class XOPBase : public Command
return;
}
- service_reference<AccessProvider> provider("access/xop");
+ service_reference<AccessProvider> provider("AccessProvider", "access/xop");
if (!provider)
return;
XOPChanAccess *acc = debug_cast<XOPChanAccess *>(provider->Create());
diff --git a/modules/commands/help.cpp b/modules/commands/help.cpp
index dc0c3864d..a7356c0d0 100644
--- a/modules/commands/help.cpp
+++ b/modules/commands/help.cpp
@@ -45,7 +45,7 @@ class CommandHelp : public Command
if (cmd != it->first && bi->commands.count(cmd))
continue;
- service_reference<Command> c(info.name);
+ service_reference<Command> c("Command", info.name);
if (!c)
continue;
if (!Config->HidePrivilegedCommands || info.permission.empty() || u->HasCommand(info.permission))
@@ -71,7 +71,7 @@ class CommandHelp : public Command
CommandInfo &info = it->second;
- service_reference<Command> c(info.name);
+ service_reference<Command> c("Command", info.name);
if (!c)
continue;
diff --git a/modules/commands/ns_saset.cpp b/modules/commands/ns_saset.cpp
index 0afd08c15..793c8c670 100644
--- a/modules/commands/ns_saset.cpp
+++ b/modules/commands/ns_saset.cpp
@@ -40,7 +40,7 @@ class CommandNSSASet : public Command
if (c_name.find_ci(this_name + " ") == 0)
{
- service_reference<Command> command(info.name);
+ service_reference<Command> command("Command", info.name);
if (command)
{
source.command = c_name;
diff --git a/modules/commands/ns_set.cpp b/modules/commands/ns_set.cpp
index 4f5d6e5b5..b52bec52a 100644
--- a/modules/commands/ns_set.cpp
+++ b/modules/commands/ns_set.cpp
@@ -41,7 +41,7 @@ class CommandNSSet : public Command
if (c_name.find_ci(this_name + " ") == 0)
{
- service_reference<Command> command(info.name);
+ service_reference<Command> command("Command", info.name);
if (command)
{
source.command = c_name;
diff --git a/modules/commands/os_akill.cpp b/modules/commands/os_akill.cpp
index db303a2f3..c34e932b0 100644
--- a/modules/commands/os_akill.cpp
+++ b/modules/commands/os_akill.cpp
@@ -13,7 +13,7 @@
#include "module.h"
-static service_reference<XLineManager> akills("xlinemanager/sgline");
+static service_reference<XLineManager> akills("XLineManager", "xlinemanager/sgline");
class AkillDelCallback : public NumberList
{
diff --git a/modules/commands/os_chankill.cpp b/modules/commands/os_chankill.cpp
index 19b202f6d..43ac0b3ee 100644
--- a/modules/commands/os_chankill.cpp
+++ b/modules/commands/os_chankill.cpp
@@ -13,7 +13,7 @@
#include "module.h"
-static service_reference<XLineManager> akills("xlinemanager/sgline");
+static service_reference<XLineManager> akills("XLineManager", "xlinemanager/sgline");
class CommandOSChanKill : public Command
{
diff --git a/modules/commands/os_defcon.cpp b/modules/commands/os_defcon.cpp
index 2905b07bf..7e40a5c02 100644
--- a/modules/commands/os_defcon.cpp
+++ b/modules/commands/os_defcon.cpp
@@ -243,7 +243,7 @@ class CommandOSDefcon : public Command
class OSDefcon : public Module
{
- service_reference<SessionService, Base> session_service;
+ service_reference<SessionService> session_service;
service_reference<XLineManager> akills;
CommandOSDefcon commandosdefcon;
@@ -335,7 +335,7 @@ class OSDefcon : public Module
}
public:
- OSDefcon(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE), session_service("session"), akills("xlinemanager/sgline"), commandosdefcon(this)
+ OSDefcon(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE), session_service("SessionService", "session"), akills("XLineManager", "xlinemanager/sgline"), commandosdefcon(this)
{
this->SetAuthor("Anope");
diff --git a/modules/commands/os_forbid.cpp b/modules/commands/os_forbid.cpp
index b5d9876fb..a60b362db 100644
--- a/modules/commands/os_forbid.cpp
+++ b/modules/commands/os_forbid.cpp
@@ -34,14 +34,14 @@ class MyForbidService : public ForbidService
delete d;
}
- ForbidData *FindForbid(const Anope::string &mask, ForbidType type)
+ ForbidData *FindForbid(const Anope::string &mask, ForbidType ftype)
{
const std::vector<ForbidData *> &forbids = this->GetForbids();
for (unsigned i = forbids.size(); i > 0; --i)
{
ForbidData *d = this->forbidData[i - 1];
- if ((type == FT_NONE || type == d->type) && Anope::Match(mask, d->mask))
+ if ((ftype == FT_NONE || ftype == d->type) && Anope::Match(mask, d->mask))
return d;
}
return NULL;
@@ -55,15 +55,15 @@ class MyForbidService : public ForbidService
if (d->expires && Anope::CurTime >= d->expires)
{
- Anope::string type = "none";
+ Anope::string ftype = "none";
if (d->type == FT_NICK)
- type = "nick";
+ ftype = "nick";
else if (d->type == FT_CHAN)
- type = "chan";
+ ftype = "chan";
else if (d->type == FT_EMAIL)
- type = "email";
+ ftype = "email";
- Log(LOG_NORMAL, Config->OperServ + "/forbid") << "Expiring forbid for " << d->mask << " type " << type;
+ Log(LOG_NORMAL, Config->OperServ + "/forbid") << "Expiring forbid for " << d->mask << " type " << ftype;
this->forbidData.erase(this->forbidData.begin() + i - 1);
delete d;
}
@@ -75,9 +75,9 @@ class MyForbidService : public ForbidService
class CommandOSForbid : public Command
{
- service_reference<ForbidService, Base> fs;
+ service_reference<ForbidService> fs;
public:
- CommandOSForbid(Module *creator) : Command(creator, "operserv/forbid", 1, 5), fs("forbid")
+ CommandOSForbid(Module *creator) : Command(creator, "operserv/forbid", 1, 5), fs("ForbidService", "forbid")
{
this->SetDesc(_("Forbid usage of nicknames, channels, and emails"));
this->SetSyntax(_("ADD {NICK|CHAN|EMAIL} [+\037expiry\037] \037entry\037\002 [\037reason\037]"));
@@ -93,15 +93,15 @@ class CommandOSForbid : public Command
const Anope::string &command = params[0];
const Anope::string &subcommand = params.size() > 1 ? params[1] : "";
- ForbidType type = FT_NONE;
+ ForbidType ftype = FT_NONE;
if (subcommand.equals_ci("NICK"))
- type = FT_NICK;
+ ftype = FT_NICK;
else if (subcommand.equals_ci("CHAN"))
- type = FT_CHAN;
+ ftype = FT_CHAN;
else if (subcommand.equals_ci("EMAIL"))
- type = FT_EMAIL;
+ ftype = FT_EMAIL;
- if (command.equals_ci("ADD") && params.size() > 3 && type != FT_NONE)
+ if (command.equals_ci("ADD") && params.size() > 3 && ftype != FT_NONE)
{
const Anope::string &expiry = params[2][0] == '+' ? params[2] : "";
const Anope::string &entry = !expiry.empty() ? params[3] : params[2];
@@ -127,7 +127,7 @@ class CommandOSForbid : public Command
expiryt += Anope::CurTime;
}
- ForbidData *d = this->fs->FindForbid(entry, type);
+ ForbidData *d = this->fs->FindForbid(entry, ftype);
bool created = false;
if (d == NULL)
{
@@ -140,18 +140,18 @@ class CommandOSForbid : public Command
d->reason = reason;
d->created = Anope::CurTime;
d->expires = expiryt;
- d->type = type;
+ d->type = ftype;
if (created)
this->fs->AddForbid(d);
Log(LOG_ADMIN, source.u, this) << "to add a forbid on " << entry << " of type " << subcommand;
- source.Reply(_("Added a%s forbid on %s to expire on %s"), type == FT_CHAN ? "n" : "", entry.c_str(), d->expires ? do_strftime(d->expires).c_str() : "never");
+ source.Reply(_("Added a%s forbid on %s to expire on %s"), ftype == FT_CHAN ? "n" : "", entry.c_str(), d->expires ? do_strftime(d->expires).c_str() : "never");
}
- else if (command.equals_ci("DEL") && params.size() > 2 && type != FT_NONE)
+ else if (command.equals_ci("DEL") && params.size() > 2 && ftype != FT_NONE)
{
const Anope::string &entry = params[2];
- ForbidData *d = this->fs->FindForbid(entry, type);
+ ForbidData *d = this->fs->FindForbid(entry, ftype);
if (d != NULL)
{
Log(LOG_ADMIN, source.u, this) << "to remove forbid " << d->mask << " of type " << subcommand;
@@ -175,19 +175,19 @@ class CommandOSForbid : public Command
{
ForbidData *d = forbids[i];
- Anope::string ftype;
+ Anope::string stype;
if (d->type == FT_NICK)
- ftype = "NICK";
+ stype = "NICK";
else if (d->type == FT_CHAN)
- ftype = "CHAN";
+ stype = "CHAN";
else if (d->type == FT_EMAIL)
- ftype = "EMAIL";
+ stype = "EMAIL";
else
continue;
ListFormatter::ListEntry entry;
entry["Mask"] = d->mask;
- entry["Type"] = ftype;
+ entry["Type"] = stype;
entry["Creator"] = d->creator;
entry["Expires"] = d->expires ? do_strftime(d->expires).c_str() : "never";
entry["Reason"] = d->reason;
diff --git a/modules/commands/os_forbid.h b/modules/commands/os_forbid.h
index 1ccb36e91..98e5fdc81 100644
--- a/modules/commands/os_forbid.h
+++ b/modules/commands/os_forbid.h
@@ -23,10 +23,10 @@ struct ForbidData : Serializable
static void unserialize(serialized_data &data);
};
-class ForbidService : public Service<Base>
+class ForbidService : public Service
{
public:
- ForbidService(Module *m) : Service<Base>(m, "forbid") { }
+ ForbidService(Module *m) : Service(m, "ForbidService", "forbid") { }
virtual void AddForbid(ForbidData *d) = 0;
@@ -37,7 +37,7 @@ class ForbidService : public Service<Base>
virtual const std::vector<ForbidData *> &GetForbids() = 0;
};
-static service_reference<ForbidService, Base> forbid_service("forbid");
+static service_reference<ForbidService> forbid_service("ForbidService", "forbid");
Serializable::serialized_data ForbidData::serialize()
{
diff --git a/modules/commands/os_ignore.h b/modules/commands/os_ignore.h
index d59ab6a5f..4a47c947f 100644
--- a/modules/commands/os_ignore.h
+++ b/modules/commands/os_ignore.h
@@ -22,12 +22,12 @@ struct IgnoreData : Serializable
static void unserialize(serialized_data &data);
};
-class IgnoreService : public Service<Base>
+class IgnoreService : public Service
{
protected:
std::list<IgnoreData> ignores;
- IgnoreService(Module *c) : Service<Base>(c, "ignore") { }
+ IgnoreService(Module *c) : Service(c, "IgnoreService", "ignore") { }
public:
virtual void AddIgnore(const Anope::string &mask, const Anope::string &creator, const Anope::string &reason, time_t delta = Anope::CurTime) = 0;
@@ -41,7 +41,7 @@ class IgnoreService : public Service<Base>
inline std::list<IgnoreData> &GetIgnores() { return this->ignores; }
};
-static service_reference<IgnoreService, Base> ignore_service("ignore");
+static service_reference<IgnoreService> ignore_service("IgnoreService", "ignore");
Serializable::serialized_data IgnoreData::serialize()
{
diff --git a/modules/commands/os_modinfo.cpp b/modules/commands/os_modinfo.cpp
index 0fd0ff5bd..75859a762 100644
--- a/modules/commands/os_modinfo.cpp
+++ b/modules/commands/os_modinfo.cpp
@@ -31,10 +31,10 @@ class CommandOSModInfo : public Command
{
source.Reply(_("Module: \002%s\002 Version: \002%s\002 Author: \002%s\002 loaded: \002%s\002"), m->name.c_str(), !m->version.empty() ? m->version.c_str() : "?", !m->author.empty() ? m->author.c_str() : "?", do_strftime(m->created).c_str());
- std::vector<Anope::string> servicekeys = Service<Command>::GetServiceKeys();
+ std::vector<Anope::string> servicekeys = Service::GetServiceKeys("Command");
for (unsigned i = 0; i <