]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_whowas.cpp
Convert WriteNumeric() calls to pass the parameters of the numeric as method parameters
[user/henk/code/inspircd.git] / src / coremods / core_whowas.cpp
index 12ab940dd70db50d52346f98cb12fed01a76c11e..e04a69200ac010a83ce679b0c9a877d88b1decca 100644 (file)
@@ -35,14 +35,14 @@ CmdResult CommandWhowas::Handle (const std::vector<std::string>& parameters, Use
        /* if whowas disabled in config */
        if (!manager.IsEnabled())
        {
-               user->WriteNumeric(ERR_UNKNOWNCOMMAND, "%s :This command has been disabled.", name.c_str());
+               user->WriteNumeric(ERR_UNKNOWNCOMMAND, name, "This command has been disabled.");
                return CMD_FAILURE;
        }
 
        const WhoWas::Nick* const nick = manager.FindNick(parameters[0]);
        if (!nick)
        {
-               user->WriteNumeric(ERR_WASNOSUCHNICK, "%s :There was no such nickname", parameters[0].c_str());
+               user->WriteNumeric(ERR_WASNOSUCHNICK, parameters[0], "There was no such nickname");
        }
        else
        {
@@ -51,18 +51,18 @@ CmdResult CommandWhowas::Handle (const std::vector<std::string>& parameters, Use
                {
                        WhoWas::Entry* u = *i;
 
-                       user->WriteNumeric(RPL_WHOWASUSER, "%s %s %s * :%s", parameters[0].c_str(), u->ident.c_str(),u->dhost.c_str(),u->gecos.c_str());
+                       user->WriteNumeric(RPL_WHOWASUSER, parameters[0], u->ident, u->dhost, '*', u->gecos);
 
                        if (user->HasPrivPermission("users/auspex"))
-                               user->WriteNumeric(RPL_WHOWASIP, "%s :was connecting from *@%s", parameters[0].c_str(), u->host.c_str());
+                               user->WriteNumeric(RPL_WHOWASIP, parameters[0], InspIRCd::Format("was connecting from *@%s", u->host.c_str()));
 
                        std::string signon = InspIRCd::TimeString(u->signon);
                        bool hide_server = (!ServerInstance->Config->HideWhoisServer.empty() && !user->HasPrivPermission("servers/auspex"));
-                       user->WriteNumeric(RPL_WHOISSERVER, "%s %s :%s", parameters[0].c_str(), (hide_server ? ServerInstance->Config->HideWhoisServer.c_str() : u->server.c_str()), signon.c_str());
+                       user->WriteNumeric(RPL_WHOISSERVER, parameters[0], (hide_server ? ServerInstance->Config->HideWhoisServer : u->server), signon);
                }
        }
 
-       user->WriteNumeric(RPL_ENDOFWHOWAS, "%s :End of WHOWAS", parameters[0].c_str());
+       user->WriteNumeric(RPL_ENDOFWHOWAS, parameters[0], "End of WHOWAS");
        return CMD_SUCCESS;
 }
 
@@ -76,11 +76,7 @@ const WhoWas::Nick* WhoWas::Manager::FindNick(const std::string& nickname) const
        whowas_users::const_iterator it = whowas.find(nickname);
        if (it == whowas.end())
                return NULL;
-
-       const Nick* nick = it->second;
-       if (nick->entries.empty())
-               return NULL;
-       return nick;
+       return it->second;
 }
 
 WhoWas::Manager::Stats WhoWas::Manager::GetStats() const
@@ -153,7 +149,7 @@ void WhoWas::Manager::Prune()
        }
 
        /* Then cut the whowas sets to new size (groupsize) */
-       for (whowas_users::iterator i = whowas.begin(); i != whowas.end(); ++i)
+       for (whowas_users::iterator i = whowas.begin(); i != whowas.end(); )
        {
                WhoWas::Nick::List& list = i->second->entries;
                while (list.size() > this->GroupSize)
@@ -161,6 +157,11 @@ void WhoWas::Manager::Prune()
                        delete list.front();
                        list.pop_front();
                }
+
+               if (list.empty())
+                       PurgeNick(i++);
+               else
+                       ++i;
        }
 }
 
@@ -168,7 +169,7 @@ void WhoWas::Manager::Prune()
 void WhoWas::Manager::Maintain()
 {
        time_t min = ServerInstance->Time() - this->MaxKeep;
-       for (whowas_users::iterator i = whowas.begin(); i != whowas.end(); ++i)
+       for (whowas_users::iterator i = whowas.begin(); i != whowas.end(); )
        {
                WhoWas::Nick::List& list = i->second->entries;
                while (!list.empty() && list.front()->signon < min)
@@ -176,6 +177,11 @@ void WhoWas::Manager::Maintain()
                        delete list.front();
                        list.pop_front();
                }
+
+               if (list.empty())
+                       PurgeNick(i++);
+               else
+                       ++i;
        }
 }