summaryrefslogtreecommitdiff
path: root/src/coremods/core_list.cpp
diff options
context:
space:
mode:
authorPeter Powell <petpow@saberuk.com>2019-04-18 20:34:16 +0100
committerPeter Powell <petpow@saberuk.com>2019-04-18 21:18:16 +0100
commite915fcbc00b7ac3fbe9d7af11e4f56778f9d2200 (patch)
treef16c8e34487affed0599f5116d5876ab5a3709a1 /src/coremods/core_list.cpp
parent8459e625349c03039e7545c213f84d8756034390 (diff)
Fix some bugs in LIST constraint parsing.
1. Allow flags to be specified in lower case. This behaviour is required by the draft-hardy-irc-isupport-00 specification. 2. Allow more than one constraint to be specified.
Diffstat (limited to 'src/coremods/core_list.cpp')
-rw-r--r--src/coremods/core_list.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/coremods/core_list.cpp b/src/coremods/core_list.cpp
index f03fbbe5e..40a5c8b59 100644
--- a/src/coremods/core_list.cpp
+++ b/src/coremods/core_list.cpp
@@ -48,6 +48,7 @@ class CommandList : public Command
, secretmode(creator, "secret")
, privatemode(creator, "private")
{
+ allow_empty_last_param = false;
Penalty = 5;
}
@@ -87,36 +88,37 @@ CmdResult CommandList::Handle(User* user, const Params& parameters)
size_t minusers = 0;
size_t maxusers = 0;
- if ((parameters.size() == 1) && (!parameters[0].empty()))
+ for (Params::const_iterator iter = parameters.begin(); iter != parameters.end(); ++iter)
{
- if (parameters[0][0] == '<')
+ const std::string& constraint = *iter;
+ if (constraint[0] == '<')
{
- maxusers = ConvToNum<size_t>(parameters[0].c_str() + 1);
+ maxusers = ConvToNum<size_t>(constraint.c_str() + 1);
}
- else if (parameters[0][0] == '>')
+ else if (constraint[0] == '>')
{
- minusers = ConvToNum<size_t>(parameters[0].c_str() + 1);
+ minusers = ConvToNum<size_t>(constraint.c_str() + 1);
}
- else if (!parameters[0].compare(0, 2, "C<", 2))
+ else if (!constraint.compare(0, 2, "C<", 2) || !constraint.compare(0, 2, "c<", 2))
{
- mincreationtime = ParseMinutes(parameters[0]);
+ mincreationtime = ParseMinutes(constraint);
}
- else if (!parameters[0].compare(0, 2, "C>", 2))
+ else if (!constraint.compare(0, 2, "C>", 2) || !constraint.compare(0, 2, "c>", 2))
{
- maxcreationtime = ParseMinutes(parameters[0]);
+ maxcreationtime = ParseMinutes(constraint);
}
- else if (!parameters[0].compare(0, 2, "T<", 2))
+ else if (!constraint.compare(0, 2, "T<", 2) || !constraint.compare(0, 2, "t<", 2))
{
- mintopictime = ParseMinutes(parameters[0]);
+ mintopictime = ParseMinutes(constraint);
}
- else if (!parameters[0].compare(0, 2, "T>", 2))
+ else if (!constraint.compare(0, 2, "T>", 2) || !constraint.compare(0, 2, "t>", 2))
{
- maxtopictime = ParseMinutes(parameters[0]);
+ maxtopictime = ParseMinutes(constraint);
}
else
{
// If the glob is prefixed with ! it is inverted.
- match = parameters[0].c_str();
+ match = constraint.c_str();
if (match[0] == '!')
{
match_inverted = true;