diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/hashcomp.cpp | 27 | ||||
-rw-r--r-- | src/modules/m_remove.cpp | 19 | ||||
-rw-r--r-- | src/modules/m_saquit.cpp | 10 |
3 files changed, 38 insertions, 18 deletions
diff --git a/src/hashcomp.cpp b/src/hashcomp.cpp index 2acd59f91..0908e41b5 100644 --- a/src/hashcomp.cpp +++ b/src/hashcomp.cpp @@ -354,3 +354,30 @@ int irc::modestacker::GetStackedLine(std::deque<std::string> &result) return n; } + +irc::stringjoiner::stringjoiner(const std::string &seperator, const std::vector<std::string> &sequence, int begin, int end) +{ + for (int v = begin; v < end; v++) + joined.append(sequence[v]).append(seperator); + joined.append(sequence[end]); +} + +irc::stringjoiner::stringjoiner(const std::string &seperator, const std::deque<std::string> &sequence, int begin, int end) +{ + for (int v = begin; v < end; v++) + joined.append(sequence[v]).append(seperator); + joined.append(sequence[end]); +} + +irc::stringjoiner::stringjoiner(const std::string &seperator, const char** sequence, int begin, int end) +{ + for (int v = begin; v < end; v++) + joined.append(sequence[v]).append(seperator); + joined.append(sequence[end]); +} + +std::string& irc::stringjoiner::GetJoined() +{ + return joined; +} + diff --git a/src/modules/m_remove.cpp b/src/modules/m_remove.cpp index 839530487..be4292e56 100644 --- a/src/modules/m_remove.cpp +++ b/src/modules/m_remove.cpp @@ -48,7 +48,8 @@ class RemoveBase enum ModeLevel { PEON = 0, HALFOP = 1, OP = 2, ADMIN = 3, OWNER = 4, ULINE = 5 }; /* This little function just converts a chanmode character (U ~ & @ & +) into an integer (5 4 3 2 1 0) */ - /* XXX - this could be handy in the core, so it can be used elsewhere */ + /* XXX - We should probably use the new mode prefix rank stuff + * for this instead now -- Brain */ ModeLevel chartolevel(const std::string &privs) { if(privs.empty()) @@ -180,20 +181,16 @@ class RemoveBase if ((ulevel > PEON) && (ulevel >= tlevel) && (tlevel != OWNER)) { // no you can't just go from a std::ostringstream to a std::string, Om. -nenolod - std::ostringstream reason_stream; - std::string reasonparam; + // but you can do this, nenolod -brain + + std::string reasonparam("No reason given"); /* If a reason is given, use it */ if(pcnt > 2) { - /* Use all the remaining parameters as the reason */ - for(int i = 2; i < pcnt; i++) - { - reason_stream << " " << parameters[i]; - } - - reasonparam = reason_stream.str(); - reason_stream.clear(); + /* Join params 2 ... pcnt - 1 (inclusive) into one */ + irc::stringjoiner reason_join(" ", parameters, 2, pcnt - 1); + reasonparam = reason_join.GetJoined(); } /* Build up the part reason string. */ diff --git a/src/modules/m_saquit.cpp b/src/modules/m_saquit.cpp index 54eaf7ea8..20ffdd99e 100644 --- a/src/modules/m_saquit.cpp +++ b/src/modules/m_saquit.cpp @@ -57,13 +57,9 @@ class cmd_saquit : public command_t user->WriteServ("990 %s :Cannot use an SA command on a u-lined client",user->nick); return CMD_FAILURE; } - std::string line = ""; - for (int i = 1; i < pcnt - 1; i++) - { - line = line + std::string(parameters[i]) + " "; - } - line = line + std::string(parameters[pcnt-1]); - + irc::stringjoiner reason_join(" ", parameters, 1, pcnt - 1); + std::string line = reason_join.GetJoined(); + ServerInstance->WriteOpers(std::string(user->nick)+" used SAQUIT to make "+std::string(dest->nick)+" quit with a reason of "+line); userrec::QuitUser(ServerInstance, dest, line); |