summaryrefslogtreecommitdiff
path: root/src/coremods/core_who.cpp
diff options
context:
space:
mode:
authorlinuxdaemon <linuxdaemon@snoonet.org>2019-03-12 09:48:28 -0500
committerPeter Powell <petpow@saberuk.com>2019-03-12 17:14:53 +0000
commitdfb1e0da7823641ad648f9fbd19b43d2e6b0d7ad (patch)
tree7ef8b5ae60b08765f6e2e04fa43b5a954dbcf87e /src/coremods/core_who.cpp
parentf87b72b76f9ef198bdbbb01f9ca409501666c6a2 (diff)
Add Who::Request::GetFlagIndex to get field index
Replaces the dirty logic in m_hideoper and m_namesx
Diffstat (limited to 'src/coremods/core_who.cpp')
-rw-r--r--src/coremods/core_who.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/coremods/core_who.cpp b/src/coremods/core_who.cpp
index bf00b741f..f32ef77b3 100644
--- a/src/coremods/core_who.cpp
+++ b/src/coremods/core_who.cpp
@@ -34,8 +34,19 @@ enum
RPL_WHOSPCRPL = 354
};
+static const char whox_field_order[] = "tcuihsnfdlaor";
+static const char who_field_order[] = "cuhsnf";
+
struct WhoData : public Who::Request
{
+ std::string query_flag_order;
+
+ bool GetFlagIndex(char flag, size_t& out) const CXX11_OVERRIDE
+ {
+ out = query_flag_order.find(flag);
+ return out != std::string::npos;
+ }
+
WhoData(const CommandBase::Params& parameters)
{
// Find the matchtext and swap the 0 for a * so we can use InspIRCd::Match on it.
@@ -74,6 +85,17 @@ struct WhoData : public Who::Request
current_bitset->set(chr);
}
}
+
+ if (whox)
+ {
+ for (const char *c = whox_field_order; c; c++)
+ {
+ if (whox_fields[*c])
+ query_flag_order.push_back(*c);
+ }
+ }
+ else
+ query_flag_order = who_field_order;
}
};