mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 19:19:02 -04:00
This should save 128 bytes per user for non-opers. Well worth it imho for a reasonably large amount of unused ram.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9179 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
029e804945
commit
20680f9c49
@ -458,10 +458,10 @@ class CoreExport User : public connection
|
||||
std::map<std::string, bool>* AllowedOperCommands;
|
||||
|
||||
/** Allowed user modes from oper classes. */
|
||||
bool AllowedUserModes[64];
|
||||
bool* AllowedUserModes;
|
||||
|
||||
/** Allowed channel modes from oper classes. */
|
||||
bool AllowedChanModes[64];
|
||||
bool* AllowedChanModes;
|
||||
|
||||
public:
|
||||
/** Contains a pointer to the connect class a user is on from - this will be NULL for remote connections.
|
||||
|
@ -193,6 +193,8 @@ User::User(InspIRCd* Instance, const std::string &uid) : ServerInstance(Instance
|
||||
Visibility = NULL;
|
||||
ip = NULL;
|
||||
MyClass = NULL;
|
||||
AllowedUserModes = NULL;
|
||||
AllowedChanModes = NULL;
|
||||
AllowedOperCommands = NULL;
|
||||
memset(AllowedUserModes, 0, sizeof(AllowedUserModes));
|
||||
memset(AllowedChanModes, 0, sizeof(AllowedChanModes));
|
||||
@ -231,6 +233,18 @@ User::~User()
|
||||
AllowedOperCommands = NULL;
|
||||
}
|
||||
|
||||
if (this->AllowedUserModes)
|
||||
{
|
||||
delete AllowedUserModes;
|
||||
AllowedUserModes = NULL;
|
||||
}
|
||||
|
||||
if (this->AllowedChanModes)
|
||||
{
|
||||
delete AllowedChanModes;
|
||||
AllowedChanModes = NULL;
|
||||
}
|
||||
|
||||
this->InvalidateCache();
|
||||
this->DecrementModes();
|
||||
|
||||
@ -447,6 +461,9 @@ bool User::HasModePermission(unsigned char mode, ModeType type)
|
||||
if (!IS_OPER(this))
|
||||
return false;
|
||||
|
||||
if (!AllowedUserModes || !AllowedChanModes)
|
||||
return false;
|
||||
|
||||
return ((type == MODETYPE_USER ? AllowedUserModes : AllowedChanModes))[(mode - 'A')];
|
||||
|
||||
}
|
||||
@ -683,6 +700,15 @@ void User::Oper(const std::string &opertype, const std::string &opername)
|
||||
else
|
||||
AllowedOperCommands = new std::map<std::string, bool>;
|
||||
|
||||
if (!AllowedChanModes)
|
||||
AllowedChanModes = new bool[64];
|
||||
|
||||
if (!AllowedUserModes)
|
||||
AllowedUserModes = new bool[64];
|
||||
|
||||
memset(AllowedUserModes, 0, 64);
|
||||
memset(AllowedChanModes, 0, 64);
|
||||
|
||||
char* Classes = strdup(iter_opertype->second);
|
||||
char* myclass = strtok_r(Classes," ",&savept);
|
||||
while (myclass)
|
||||
|
Loading…
x
Reference in New Issue
Block a user