- assert(what == 'I' || what == 'b');
-
- mask = Lists_MakeMask(Pattern);
-
- if (what == 'I') {
- if (Lists_CheckDupeMask(Channel_GetListInvites(Channel), mask))
- return CONNECTED;
- if (!Channel_AddInvite(Channel, mask, false))
- return CONNECTED;
- return Send_ListChange("+I", Prefix, Client, Channel, mask);
- } else {
- if (Lists_CheckDupeMask(Channel_GetListBans(Channel), mask))
- return CONNECTED;
- if (!Channel_AddBan(Channel, mask))
- return CONNECTED;
- return Send_ListChange("+b", Prefix, Client, Channel, mask);
+ assert(what == 'I' || what == 'b' || what == 'e');
+
+ Lists_MakeMask(Pattern, mask, sizeof(mask));
+ current_count = Lists_Count(Channel_GetListInvites(Channel))
+ + Lists_Count(Channel_GetListExcepts(Channel))
+ + Lists_Count(Channel_GetListBans(Channel));
+
+ switch(what) {
+ case 'I':
+ list = Channel_GetListInvites(Channel);
+ break;
+ case 'b':
+ list = Channel_GetListBans(Channel);
+ break;
+ case 'e':
+ list = Channel_GetListExcepts(Channel);
+ break;
+ }
+
+ if (Lists_CheckDupeMask(list, mask))
+ return CONNECTED;
+ if (Client_Type(Client) == CLIENT_USER &&
+ current_count >= MAX_HNDL_CHANNEL_LISTS)
+ return IRC_WriteStrClient(Client, ERR_LISTFULL_MSG,
+ Client_ID(Client),
+ Channel_Name(Channel), mask,
+ MAX_HNDL_CHANNEL_LISTS);
+
+ switch (what) {
+ case 'I':
+ if (!Channel_AddInvite(Channel, mask, false))
+ return CONNECTED;
+ break;
+ case 'b':
+ if (!Channel_AddBan(Channel, mask))
+ return CONNECTED;
+ break;
+ case 'e':
+ if (!Channel_AddExcept(Channel, mask))
+ return CONNECTED;
+ break;