summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/opertype.h4
-rw-r--r--src/opertype.cpp24
2 files changed, 22 insertions, 6 deletions
diff --git a/include/opertype.h b/include/opertype.h
index 364343f25..f76fc07b1 100644
--- a/include/opertype.h
+++ b/include/opertype.h
@@ -104,12 +104,12 @@ class CoreExport OperType
/** Gets the icommands for this opertype
* @return A list of commands
*/
- const std::list<Anope::string> &GetCommands() const;
+ const std::list<Anope::string> GetCommands() const;
/** Gets the privileges for this opertype
* @return A list of privileges
*/
- const std::list<Anope::string> &GetPrivs() const;
+ const std::list<Anope::string> GetPrivs() const;
};
#endif // OPERTYPE_H
diff --git a/src/opertype.cpp b/src/opertype.cpp
index 9d6a4086f..5d9c666b4 100644
--- a/src/opertype.cpp
+++ b/src/opertype.cpp
@@ -94,13 +94,29 @@ void OperType::Inherits(OperType *ot)
this->inheritances.insert(ot);
}
-const std::list<Anope::string> &OperType::GetCommands() const
+const std::list<Anope::string> OperType::GetCommands() const
{
- return this->commands;
+ std::list<Anope::string> cmd_list = this->commands;
+ for (std::set<OperType *>::const_iterator it = this->inheritances.begin(), it_end = this->inheritances.end(); it != it_end; ++it)
+ {
+ OperType *ot = *it;
+ std::list<Anope::string> cmds = ot->GetPrivs();
+ for (std::list<Anope::string>::const_iterator it2 = cmds.begin(), it2_end = cmds.end(); it2 != it2_end; ++it2)
+ cmd_list.push_back(*it2);
+ }
+ return cmd_list;
}
-const std::list<Anope::string> &OperType::GetPrivs() const
+const std::list<Anope::string> OperType::GetPrivs() const
{
- return this->privs;
+ std::list<Anope::string> priv_list = this->privs;
+ for (std::set<OperType *>::const_iterator it = this->inheritances.begin(), it_end = this->inheritances.end(); it != it_end; ++it)
+ {
+ OperType *ot = *it;
+ std::list<Anope::string> priv = ot->GetPrivs();
+ for (std::list<Anope::string>::const_iterator it2 = priv.begin(), it2_end = priv.end(); it2 != it2_end; ++it2)
+ priv_list.push_back(*it2);
+ }
+ return priv_list;
}