diff options
-rw-r--r-- | include/mode.h | 6 | ||||
-rw-r--r-- | src/mode.cpp | 11 |
2 files changed, 12 insertions, 5 deletions
diff --git a/include/mode.h b/include/mode.h index 868f3437d..de92e8ec5 100644 --- a/include/mode.h +++ b/include/mode.h @@ -716,8 +716,12 @@ class CoreExport ModeParser : public fakederef<ModeParser> * @param parameters List of strings describing the mode change to convert to a ChangeList. * Must be using the same format as the parameters of a MODE command. * @param changelist ChangeList object to populate. + * @param beginindex Index of the first element that is part of the MODE list in the parameters + * container. Defaults to 1. + * @param endindex Index of the first element that is not part of the MODE list. By default, + * the entire container is considered part of the MODE list. */ - void ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist); + void ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist, unsigned int beginindex = 1, unsigned int endindex = UINT_MAX); /** Find the mode handler for a given mode name and type. * @param modename The mode name to search for. diff --git a/src/mode.cpp b/src/mode.cpp index d9dba196d..770e6a2e2 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -425,12 +425,15 @@ void ModeParser::Process(const std::vector<std::string>& parameters, User* user, } } -void ModeParser::ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist) +void ModeParser::ModeParamsToChangeList(User* user, ModeType type, const std::vector<std::string>& parameters, Modes::ChangeList& changelist, unsigned int beginindex, unsigned int endindex) { - const std::string& mode_sequence = parameters[1]; + if (endindex > parameters.size()) + endindex = parameters.size(); + + const std::string& mode_sequence = parameters[beginindex]; bool adding = true; - unsigned int param_at = 2; + unsigned int param_at = beginindex+1; for (std::string::const_iterator letter = mode_sequence.begin(); letter != mode_sequence.end(); letter++) { @@ -450,7 +453,7 @@ void ModeParser::ModeParamsToChangeList(User* user, ModeType type, const std::ve } std::string parameter; - if (mh->GetNumParams(adding) && param_at < parameters.size()) + if (mh->GetNumParams(adding) && param_at < endindex) parameter = parameters[param_at++]; changelist.push(mh, adding, parameter); |