diff options
author | adam- <adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-07-21 20:54:17 +0000 |
---|---|---|
committer | adam- <adam-@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-07-21 20:54:17 +0000 |
commit | 6a975740b30c562e75e02f813e2c9882f0d043df (patch) | |
tree | f60e0fd1a04c7b0e0a63375e00dbd23064106bbc /src | |
parent | f8efdbf822eb2f593ea1ac199f842b40963eecfa (diff) |
Fixed multiple issues with os_info, including changing the /cs oinfo syntax to work with the new fantasy system
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2389 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/os_info.c | 72 |
1 files changed, 54 insertions, 18 deletions
diff --git a/src/modules/os_info.c b/src/modules/os_info.c index efaecead9..93eddb88c 100644 --- a/src/modules/os_info.c +++ b/src/modules/os_info.c @@ -143,7 +143,7 @@ class CommandCSOInfo : public Command private: CommandReturn DoAdd(User *u, std::vector<std::string> ¶ms) { - const char *chan = params[1].c_str(); + const char *chan = params[0].c_str(); const char *info = params.size() > 2 ? params[2].c_str() : NULL; char *c; ChannelInfo *ci = cs_findchan(chan); @@ -168,7 +168,7 @@ class CommandCSOInfo : public Command CommandReturn DoDel(User *u, std::vector<std::string> ¶ms) { - const char *chan = params[1].c_str(); + const char *chan = params[0].c_str(); ChannelInfo *ci = cs_findchan(chan); /* Del the module data from the channel */ @@ -189,7 +189,7 @@ class CommandCSOInfo : public Command CommandReturn Execute(User *u, std::vector<std::string> ¶ms) { - const char *cmd = params[0].c_str(); + const char *cmd = params[1].c_str(); if (!strcasecmp(cmd, "ADD")) return this->DoAdd(u, params); @@ -220,8 +220,6 @@ class OSInfo : public Module public: OSInfo(const std::string &modname, const std::string &creator) : Module(modname, creator) { - int status; - me = this; this->SetAuthor(AUTHOR); @@ -231,13 +229,14 @@ class OSInfo : public Module if (mLoadConfig()) throw ModuleException("Unable to load config"); - status = this->AddCommand(NICKSERV, new CommandNSOInfo(), MOD_HEAD); - - status = this->AddCommand(CHANSERV, new CommandCSOInfo(), MOD_HEAD); + this->AddCommand(NICKSERV, new CommandNSOInfo(), MOD_HEAD); + this->AddCommand(CHANSERV, new CommandCSOInfo(), MOD_HEAD); ModuleManager::Attach(I_OnPostCommand, this); ModuleManager::Attach(I_OnSaveDatabase, this); ModuleManager::Attach(I_OnBackupDatabase, this); + ModuleManager::Attach(I_OnDelCore, this); + ModuleManager::Attach(I_OnDelChan, this); mLoadData(); ModuleManager::Attach(I_OnReload, this); @@ -250,7 +249,7 @@ class OSInfo : public Module /* OINFO_DEL_SUCCESS */ "OperInfo line has been removed from nick %s", /* OCINFO_SYNTAX */ - "Syntax: OINFO [ADD|DEL] chan <info>", + "Syntax: OINFO #chan [ADD|DEL] <info>", /* OCINFO_ADD_SUCCESS */ "OperInfo line has been added to channel %s", /* OCINFO_DEL_SUCCESS */ @@ -261,7 +260,7 @@ class OSInfo : public Module "This will show up when any oper /ns info nick's the user.\n" "and can be used for 'tagging' users etc....", /* OCINFO_HELP */ - "Syntax: OINFO [ADD|DEL] chan <info>\n" + "Syntax: OINFO #chan [ADD|DEL] <info>\n" "Add or Delete Oper information for the given channel\n" "This will show up when any oper /cs info's the channel.\n" "and can be used for 'tagging' channels etc....", @@ -458,22 +457,37 @@ class OSInfo : public Module ~OSInfo() { + int i; + NickCore *nc; + char *c; + ChannelInfo *ci; + OnSaveDatabase(); - for (int i = 0; i < 1024; ++i) + + for (i = 0; i < 1024; ++i) { /* Remove the nick Cores */ - for (NickCore *nc = nclists[i]; nc; nc = nc->next) + for (nc = nclists[i]; nc; nc = nc->next) { - char *c; - if (nc->GetExt("os_modinfo", c)); + if (nc->GetExt("os_info", c)); { delete [] c; - nc->Shrink("os_modinfo"); + nc->Shrink("os_info"); } } } - // XXX: shouldn't we also shrink ChanInfo? + for (i = 0; i < 256; ++i) + { + for (ci = chanlists[i]; ci; ci = ci->next) + { + if (ci->GetExt("os_info", c)) + { + delete [] c; + ci->Shrink("os_info"); + } + } + } if (OSInfoDBName) delete [] OSInfoDBName; @@ -573,6 +587,28 @@ class OSInfo : public Module ModuleDatabaseBackup(OSInfoDBName); } + void OnDelCore(NickCore *nc) + { + char *c; + + if (nc->GetExt("os_info", c)) + { + delete [] c; + nc->Shrink("os_info"); + } + } + + void OnDelChan(ChannelInfo *ci) + { + char *c; + + if (ci->GetExt("os_info", c)) + { + delete [] c; + ci->Shrink("os_info"); + } + } + void NickServHelp(User *u) { if (is_oper(u)) @@ -631,12 +667,12 @@ int mLoadData() if (!stricmp(type, "C")) { if ((ci = cs_findchan(name))) - ci->Extend("os_info", strdup("info")); + ci->Extend("os_info", sstrdup(info)); } else if (!stricmp(type, "N")) { if ((na = findnick(name))) - na->nc->Extend("os_info", strdup(info)); + na->nc->Extend("os_info", sstrdup(info)); } delete [] info; } |