hash.h (userList_contains): Declare new function.
hash.c (userList_contains): Implement it.
nickserv.c (set_user_handle_info): Use it to check against curr_helpers.
proto-p10.c (mod_usermode): Use it for curr_opers.
reg_exit_func(hash_cleanup);
}
+int userList_contains(struct userList *list, struct userNode *user)
+{
+ unsigned int ii;
+
+ for (ii = 0; ii < list->used; ++ii) {
+ if (user == list->list[ii]) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
server_link_func_t *slf_list;
unsigned int slf_size = 0, slf_used = 0;
struct chanNode* GetChannel(const char *name);
struct modeNode* GetUserMode(struct chanNode* channel, struct userNode* user);
+int userList_contains(struct userList *list, struct userNode *user);
+
typedef void (*server_link_func_t) (struct server *server);
void reg_server_link_func(server_link_func_t handler);
user->next_authed = hi->users;
hi->users = user;
hi->lastseen = now;
- if (IsHelper(user))
+ if (IsHelper(user) && !userList_contains(&curr_helpers, user))
userList_append(&curr_helpers, user);
if (hi->fakehost || old_info)
case '-': add = 0; break;
case 'o':
do_user_mode(FLAGS_OPER);
- if (add) {
+ if (!add) {
+ userList_remove(&curr_opers, user);
+ } else if (!userList_contains(&curr_opers, user)) {
userList_append(&curr_opers, user);
call_oper_funcs(user);
- } else {
- userList_remove(&curr_opers, user);
}
break;
case 'i': do_user_mode(FLAGS_INVISIBLE);