Răsfoiți Sursa

Avoid excess checks, use the cached matchedUserMembers

Bryan Drewery 14 ani în urmă
părinte
comite
afd27528f3
1 a modificat fișierele cu 9 adăugiri și 14 ștergeri
  1. 9 14
      src/mod/irc.mod/mode.c

+ 9 - 14
src/mod/irc.mod/mode.c

@@ -797,20 +797,15 @@ got_ban(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
     }
     /* remove bans on ops unless a master/bot set it */
 
-    for (memberlist *mv = chan->channel.member; mv && mv->nick[0]; mv = mv->next) {
-      simple_snprintf(s1, sizeof s1, "%s!%s", mv->nick, mv->userhost);
-      if ((wild_match(mask, s1) || match_cidr(mask, s1)) && !isexempted(chan, s1)) {
-        member_getuser(mv);
-        if (mv->user) {
-          get_user_flagrec(mv->user, &victim, chan->dname, chan);
-          if (!(glob_kick(victim) || chan_kick(victim)) && 
-              (((chk_op(victim, chan) && !chan_master(user) && !glob_master(user) && !glob_bot(user)) || 
-              (mv->user->bot && findbot(mv->user->handle))))) {
-            /* if (target_priority(chan, m, 0)) */
-            add_mode(chan, '-', 'b', mask);
-            return;
-          }
-        }
+    for (size_t n = 0; n < matchedUserMembers.size(); ++n) {
+      const memberlist *mv = matchedUserMembers[n];
+      get_user_flagrec(mv->user, &victim, chan->dname, chan);
+      if (!(glob_kick(victim) || chan_kick(victim)) &&
+          (((chk_op(victim, chan) && !chan_master(user) && !glob_master(user) && !glob_bot(user)) ||
+            (mv->user->bot && findbot(mv->user->handle))))) {
+        /* if (target_priority(chan, m, 0)) */
+        add_mode(chan, '-', 'b', mask);
+        return;
       }
     }
   }