Răsfoiți Sursa

* Optimize away some match_my_nick's by using member->is_me

Bryan Drewery 16 ani în urmă
părinte
comite
8f878607f0

+ 1 - 1
src/mod/channels.mod/userchan.c

@@ -948,7 +948,7 @@ bool expired_mask(struct chanset_t *chan, char *who)
 	break;
       }
 
-  if (!m || !chan_hasop(m) || !rfc_casecmp(m->nick, botname))
+  if (!m || !chan_hasop(m) || m->is_me)
     return 1;
 
   /* At this point we know the person/bot who set the mask is currently

+ 6 - 6
src/mod/irc.mod/chan.c

@@ -394,7 +394,7 @@ static void priority_do(struct chanset_t * chan, bool opsonly, int action, bool
 
     if (m->user && m->user->bot && (m->user->flags & USER_OP)) {
       ++ops;
-      if (match_my_nick(m->nick))
+      if (m->is_me)
         bpos = (ops - 1);
 
     } else if (!opsonly || chan_hasop(m)) {
@@ -478,7 +478,7 @@ static int target_priority(struct chanset_t * chan, memberlist *target, int opso
   for (m = chan->channel.member; m && m->nick[0]; m = m->next) {
     if (m->user && ((m->user->flags & (USER_BOT | USER_OP)) == (USER_BOT | USER_OP))) {
       ops++;
-      if (match_my_nick(m->nick))
+      if (m->is_me)
         bpos = ops;
     } else if (!opsonly || chan_hasop(m)) {
       struct flag_record fr = { FR_GLOBAL | FR_CHAN, 0, 0, 0 };
@@ -699,7 +699,7 @@ static bool detect_chan_flood(char *floodnick, char *floodhost, char *from,
 	    simple_snprintf(s, sizeof(s), "%s!%s", m->nick, m->userhost);
 	    if (!chan_sentkick(m) && wild_match(h, s) &&
 		(m->joined >= chan->floodtime[which]) &&
-		!match_my_nick(m->nick) && me_op(chan)) {
+		!m->is_me && me_op(chan)) {
 	      m->flags |= SENTKICK;
 	      if (which == FLOOD_JOIN)
    	        dprintf(DP_SERVER, "KICK %s %s :%sjoin flood\n", chan->name, m->nick, kickprefix);
@@ -795,7 +795,7 @@ static void kick_all(struct chanset_t *chan, char *hostmask, const char *comment
     if ((wild_match(hostmask, s) || match_cidr(hostmask, s) ||
           (sip[0] && (wild_match(hostmask, sip) || match_cidr(hostmask, sip)))) &&
         !chan_sentkick(m) &&
-	!match_my_nick(m->nick) && !chan_issplit(m) &&
+	!m->is_me && !chan_issplit(m) &&
 	!(use_exempts &&
 	  ((bantype && (isexempted(chan, s) || (chan->ircnet_status & CHAN_ASKED_EXEMPTS))) ||
 	   (u_match_mask(global_exempts, s) ||
@@ -1354,7 +1354,7 @@ do_take(struct chanset_t *chan)
 
   /* Make lists of who needs to be opped, and who needs to be deopped */
   for (memberlist *m = chan->channel.member; m && m->nick[0]; m = m->next) {
-    if (rfc_casecmp(m->nick, botname)) {
+    if (!m->is_me) {
       register const bool isbot = m->user && m->user->bot ? 1 : 0;
 
       /* Avoid countless unneeded operations from strcat/strlen */
@@ -1500,7 +1500,7 @@ void recheck_channel(struct chanset_t *chan, int dobans)
       member_getuser(m);
       get_user_flagrec(m->user, &fr, chan->dname, chan);
       //Already a bot opped, dont bother resetting masks
-      if (glob_bot(fr) && chan_hasop(m) && !match_my_nick(m->nick))
+      if (glob_bot(fr) && chan_hasop(m) && !m->is_me)
         stop_reset = 1;
       check_this_member(chan, m->nick, &fr);
     }

+ 3 - 3
src/mod/irc.mod/cmdsirc.c

@@ -699,10 +699,10 @@ static void cmd_mmode(int idx, char *par)
   for (m = chan->channel.member; m; m = m->next) {
     if (m->user) {
       if ((m->flags & CHANOP) && m->user->bot &&
-          (!match_my_nick(m->nick)) && (nextbot(m->user->handle) >= 0)) {
+          (!m->is_me) && (nextbot(m->user->handle) >= 0)) {
         chanbots[chanbotcount++] = m;
         continue;
-      } else if (match_my_nick(m->nick))
+      } else if (m->is_me)
         continue;
 
       get_user_flagrec(m->user, &user, chan->dname);
@@ -1585,7 +1585,7 @@ static void cmd_channel(int idx, char *par)
 			maxnicklen, maxhandlen);
 	dprintf(idx, format, chanflag[0],chanflag[1], m->nick, handle, s, atrflag,
 		now - (m->split));
-      } else if (!rfc_casecmp(m->nick, botname)) {
+      } else if (m->is_me) {
         simple_snprintf(format, sizeof format, 
 			"%%c%%c%%-%zus %%-%zus %%s %%c     <- it's me!\n", 
 			maxnicklen, maxhandlen);

+ 3 - 3
src/mod/irc.mod/irc.c

@@ -1410,7 +1410,7 @@ check_lonely_channel(struct chanset_t *chan)
     for (m = chan->channel.member; m && m->nick[0]; m = m->next) {
       simple_snprintf(s, sizeof(s), "%s!%s", m->nick, m->userhost);
       u = get_user_by_host(s);
-      if (!match_my_nick(m->nick) && (!u || !u->bot)) {
+      if (!m->is_me && (!u || !u->bot)) {
         ok = 0;
         break;
       }
@@ -1419,7 +1419,7 @@ check_lonely_channel(struct chanset_t *chan)
       /* ALL bots!  make them LEAVE!!! */
 /*
       for (m = chan->channel.member; m && m->nick[0]; m = m->next)
-	if (!match_my_nick(m->nick))
+	if (!m->is_me)
 	  dprintf(DP_SERVER, "PRIVMSG %s :go %s\n", m->nick, chan->dname);
 */
     } else {
@@ -1443,7 +1443,7 @@ static void
 check_servers(struct chanset_t *chan)
 {
   for (memberlist *m = chan->channel.member; m && m->nick[0]; m = m->next) {
-    if (!match_my_nick(m->nick) && chan_hasop(m) && (m->hops == -1)) {
+    if (!m->is_me && chan_hasop(m) && (m->hops == -1)) {
       putlog(LOG_DEBUG, "*", "Updating WHO for '%s' because '%s' is missing data.", chan->dname, m->nick);
       send_chan_who(DP_HELP, chan);
       break;                    /* lets just do one chan at a time to save from flooding */

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

@@ -538,7 +538,7 @@ static void
 got_op(struct chanset_t *chan, memberlist *m, memberlist *mv)
 {
   bool check_chan = 0;
-  bool me_opped = match_my_nick(mv->nick);
+  bool me_opped = mv->is_me;
   bool meop = me_op(chan);
 
   /* Did *I* just get opped? */
@@ -645,8 +645,8 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
   if (me_op(chan)) {
     /* do we want to reop victim? */
     if ((reversing) && 
-        ((m && !match_my_nick(m->nick) && rfc_casecmp(mv->nick, m->nick)) || (!m)) && 
-        !match_my_nick(mv->nick) &&
+        ((m && !m->is_me && rfc_casecmp(mv->nick, m->nick)) || (!m)) &&
+        !mv->is_me &&
         (chk_op(victim, chan) || !chan_bitch(chan)))
       /* Then we'll bless the victim */
       do_op(mv->nick, chan, 0, 0);
@@ -666,7 +666,7 @@ got_deop(struct chanset_t *chan, memberlist *m, memberlist *mv, char *isserver)
 //    mv->flags |= STOPWHO;
 //  }
   /* Was the bot deopped? */
-  if (match_my_nick(mv->nick)) {
+  if (mv->is_me) {
     /* Cancel any pending kicks and modes */
     memberlist *m2 = NULL;
 
@@ -707,7 +707,7 @@ got_ban(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
     return;
   }
 
-  if (m && !match_my_nick(m->nick)) {
+  if (m && !m->is_me) {
     if (channel_nouserbans(chan) && !glob_bot(user)) {
       add_mode(chan, '-', 'b', mask);
       return;
@@ -749,7 +749,7 @@ got_ban(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
         }
       }
     }
-    kick_all(chan, mask, resn[0] ? (const char *) resn : r_banned(chan), match_my_nick(m->nick) ? 0 : 1);
+    kick_all(chan, mask, resn[0] ? (const char *) resn : r_banned(chan), m->is_me ? 0 : 1);
   }
   if (!m && (bounce_bans || bounce_modes) &&
       (!u_equals_mask(global_bans, mask) || !u_equals_mask(chan->bans, mask)))
@@ -804,7 +804,7 @@ got_exempt(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
   if (channel_pending(chan))
     return;
 
-  if (m && !match_my_nick(m->nick)) {   /* It's not my exemption */
+  if (m && !m->is_me) {   /* It's not my exemption */
     if (channel_nouserexempts(chan) && !glob_bot(user) && !glob_master(user) && !chan_master(user)) {
       /* No exempts made by users */
       add_mode(chan, '-', 'e', mask);
@@ -880,7 +880,7 @@ got_invite(struct chanset_t *chan, memberlist *m, char *mask, char *isserver)
   if (channel_pending(chan))
     return;
 
-  if (m && !match_my_nick(m->nick)) {   /* It's not my invitation */
+  if (m && !m->is_me) {   /* It's not my invitation */
     if (channel_nouserinvites(chan) && !glob_bot(user) && !glob_master(user) && !chan_master(user)) {
       /* No exempts made by users */
       add_mode(chan, '-', 'I', mask);
@@ -1152,7 +1152,7 @@ gotmode(char *from, char *msg)
 
             if (unlikely(failure)) { /* One of the hashes failed! */
               /* Did *I* do this heinous act? */
-              if (match_my_nick(m->nick)) {
+              if (m->is_me) {
                 detected(DETECT_HIJACK, "Possible Hijack: bad cookie");
               }
               if (randint(7) == 0) {