Просмотр исходного кода

* Remove redundant flag clearing / joining code

Bryan Drewery 16 лет назад
Родитель
Сommit
09fb491a4a
3 измененных файлов с 22 добавлено и 34 удалено
  1. 11 17
      src/mod/irc.mod/chan.c
  2. 1 1
      src/mod/irc.mod/irc.c
  3. 10 16
      src/mod/server.mod/servmsg.c

+ 11 - 17
src/mod/irc.mod/chan.c

@@ -196,6 +196,14 @@ void resolve_to_rbl(struct chanset_t *chan, const char *host, resolv_member *r)
   free(ip);
   free(ip);
 }
 }
 
 
+// Just got a part event (KICK, PART) on me
+static void check_rejoin(struct chanset_t* chan) {
+  if (shouldjoin(chan))
+    join_chan(chan);
+  else // Out of chan, not rejoining, just clear it
+    clear_channel(chan, 1);
+}
+
 /* ID length for !channels.
 /* ID length for !channels.
  */
  */
 #define CHANNEL_ID_LEN 5
 #define CHANNEL_ID_LEN 5
@@ -2769,7 +2777,6 @@ static int gotpart(char *from, char *msg)
   if (chan && !shouldjoin(chan) && match_my_nick(nick)) {
   if (chan && !shouldjoin(chan) && match_my_nick(nick)) {
     irc_log(chan, "Parting");    
     irc_log(chan, "Parting");    
     clear_channel(chan, 1);
     clear_channel(chan, 1);
-    chan->ircnet_status = 0;
     return 0;
     return 0;
   }
   }
   if (chan && !channel_pending(chan)) {
   if (chan && !channel_pending(chan)) {
@@ -2795,10 +2802,7 @@ static int gotpart(char *from, char *msg)
       irc_log(chan, "Part: %s (%s)", nick, uhost);
       irc_log(chan, "Part: %s (%s)", nick, uhost);
     /* If it was me, all hell breaks loose... */
     /* If it was me, all hell breaks loose... */
     if (match_my_nick(nick)) {
     if (match_my_nick(nick)) {
-      clear_channel(chan, 1);
-      chan->ircnet_status = 0;
-      if (shouldjoin(chan))
-        join_chan(chan);
+      check_rejoin(chan);
     } else
     } else
       check_lonely_channel(chan);
       check_lonely_channel(chan);
   }
   }
@@ -2822,12 +2826,7 @@ static int gotkick(char *from, char *origmsg)
   char *nick = newsplit(&msg);
   char *nick = newsplit(&msg);
 
 
   if (match_my_nick(nick) && channel_pending(chan)) {
   if (match_my_nick(nick) && channel_pending(chan)) {
-    chan->ircnet_status = 0;
-    if (shouldjoin(chan)) {
-      join_chan(chan);
-      clear_channel(chan, 1);
-    } else
-      clear_channel(chan, 0);
+    check_rejoin(chan);
     return 0; /* rejoin if kicked before getting needed info <Wcc[08/08/02]> */
     return 0; /* rejoin if kicked before getting needed info <Wcc[08/08/02]> */
   }
   }
   if (channel_active(chan)) {
   if (channel_active(chan)) {
@@ -2869,12 +2868,7 @@ static int gotkick(char *from, char *origmsg)
     irc_log(chan, "%s was kicked by %s (%s)", s1, from, msg);
     irc_log(chan, "%s was kicked by %s (%s)", s1, from, msg);
     /* Kicked ME?!? the sods! */
     /* Kicked ME?!? the sods! */
     if (match_my_nick(nick)) {
     if (match_my_nick(nick)) {
-      chan->ircnet_status = 0;
-      if (shouldjoin(chan)) {
-        join_chan(chan);
-        clear_channel(chan, 1);
-      } else
-        clear_channel(chan, 0);
+      check_rejoin(chan);
     } else {
     } else {
       killmember(chan, nick);
       killmember(chan, nick);
       check_lonely_channel(chan);
       check_lonely_channel(chan);

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

@@ -1350,8 +1350,8 @@ void join_chan(struct chanset_t* chan, int idx) {
     dprintf(idx, "JOIN %s %s\n",
     dprintf(idx, "JOIN %s %s\n",
         (chan->name[0]) ? chan->name : chan->dname,
         (chan->name[0]) ? chan->name : chan->dname,
         chan->channel.key[0] ? chan->channel.key : chan->key_prot);
         chan->channel.key[0] ? chan->channel.key : chan->key_prot);
-    chan->ircnet_status |= CHAN_JOINING;
     clear_channel(chan, 1);
     clear_channel(chan, 1);
+    chan->ircnet_status |= CHAN_JOINING;
   }
   }
 }
 }
 
 

+ 10 - 16
src/mod/server.mod/servmsg.c

@@ -204,11 +204,8 @@ void
 join_chans()
 join_chans()
 {
 {
   for (register struct chanset_t *chan = chanset; chan; chan = chan->next) {
   for (register struct chanset_t *chan = chanset; chan; chan = chan->next) {
-    if (shouldjoin(chan)) {
-      // Clear out all channel status flags
-      chan->ircnet_status = 0;
+    if (shouldjoin(chan))
       join_chan(chan, DP_SERVER);
       join_chan(chan, DP_SERVER);
-    }
   }
   }
 }
 }
 
 
@@ -375,13 +372,10 @@ static int got442(char *from, char *msg)
   newsplit(&msg);
   newsplit(&msg);
   chname = newsplit(&msg);
   chname = newsplit(&msg);
   chan = findchan(chname);
   chan = findchan(chname);
-  if (chan)
-    if (shouldjoin(chan) && !channel_joining(chan)) {
-      putlog(LOG_MISC, chname, "Server says I'm not on channel: %s", chname);
-      clear_channel(chan, 1);
-      chan->ircnet_status = 0;
-      join_chan(chan);
-    }
+  if (chan && shouldjoin(chan) && !channel_joining(chan)) {
+    putlog(LOG_MISC, chname, "Server says I'm not on channel: %s", chname);
+    join_chan(chan);
+  }
 
 
   return 0;
   return 0;
 }
 }
@@ -1274,11 +1268,11 @@ static void kill_server(int idx, void *x)
 {
 {
   disconnect_server(idx, NO_LOST);	/* eof_server will lostdcc() it. */
   disconnect_server(idx, NO_LOST);	/* eof_server will lostdcc() it. */
 
 
-  if (!segfaulted)		// don't bother if we've segfaulted, too many memory calls in this loop
-    for (struct chanset_t *chan = chanset; chan; chan = chan->next) {
-      chan->ircnet_status = 0;
-      clear_channel(chan, 1);
-    }
+  if (segfaulted)		// don't bother if we've segfaulted, too many memory calls in this loop
+    return;
+
+  for (struct chanset_t *chan = chanset; chan; chan = chan->next)
+    clear_channel(chan, 1);
   /* A new server connection will be automatically initiated in
   /* A new server connection will be automatically initiated in
      about 2 seconds. */
      about 2 seconds. */
 }
 }