فهرست منبع

* Remove redundant channel key setting/clearing

Bryan Drewery 16 سال پیش
والد
کامیت
9af0fa74c8
4فایلهای تغییر یافته به همراه7 افزوده شده و 16 حذف شده
  1. 1 1
      src/mod/channels.mod/tclchan.c
  2. 1 2
      src/mod/irc.mod/chan.c
  3. 4 12
      src/mod/irc.mod/irc.c
  4. 1 1
      src/mod/irc.mod/irc.h

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

@@ -860,7 +860,7 @@ static void init_channel(struct chanset_t *chan, bool reset)
   chan->channel.splitmembers = 0;
 
   if (!reset)
-    chan->channel.key = (char *) my_calloc(1, 1);
+    my_setkey(chan, NULL);
 
   chan->channel.ban = (masklist *) my_calloc(1, sizeof(masklist));
   init_masklist(chan->channel.ban);

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

@@ -2414,8 +2414,7 @@ static int got475(char *from, char *msg)
     chan->ircnet_status &= ~CHAN_JOINING;
     putlog(LOG_JOIN, chan->dname, "Bad key--can't join: %s", chan->dname);
     if (chan->channel.key[0]) {
-      free(chan->channel.key);
-      chan->channel.key = (char *) my_calloc(1, 1);
+      my_setkey(chan, NULL);
       join_chan(chan);
     } else {
       request_in(chan);

+ 4 - 12
src/mod/irc.mod/irc.c

@@ -616,10 +616,7 @@ getin_request(char *botnick, char *code, char *par)
       putlog(LOG_GETIN, "*", "Got key for %s from %s - I shouldn't be on that chan?!?", chan->dname, botnick);
     } else {
       if (!(channel_pending(chan) || channel_active(chan))) {
-        /* Cache the key */
-        free(chan->channel.key);
-        chan->channel.key = strdup(nick);
-
+        my_setkey(chan, nick);
         putlog(LOG_GETIN, "*", "Got key for %s from %s (%s) - Joining", chan->dname, botnick, chan->channel.key);
         join_chan(chan);
       } else {
@@ -1209,15 +1206,11 @@ maybe_revenge(struct chanset_t *chan, char *whobad, char *whovictim, int type)
 
 /* Set the key.
  */
-static void
+void
 my_setkey(struct chanset_t *chan, char *k)
 {
   free(chan->channel.key);
-  if (k == NULL) {
-    chan->channel.key = (char *) my_calloc(1, 1);
-    return;
-  }
-  chan->channel.key = strdup(k);
+  chan->channel.key = k ? strdup(k) : (char *) my_calloc(1, 1);
 }
 
 /* Adds a ban, exempt or invite mask to the list
@@ -1372,8 +1365,7 @@ reset_chan_info(struct chanset_t *chan)
   if (!channel_pending(chan)) {
     bool opped = me_op(chan) ? 1 : 0;
 
-    free(chan->channel.key);
-    chan->channel.key = (char *) my_calloc(1, 1);
+    my_setkey(chan, NULL);
     clear_channel(chan, 1);
     chan->ircnet_status |= CHAN_PEND;
     chan->ircnet_status &= ~(CHAN_ACTIVE | CHAN_ASKEDMODES | CHAN_JOINING);

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

@@ -84,7 +84,6 @@ static void do_protect(struct chanset_t* chan, const char* reason);
 static bool do_op(char *, struct chanset_t *, bool, bool);
 static void request_op(struct chanset_t *);
 static void request_in(struct chanset_t *);
-static void my_setkey(struct chanset_t *, char *);
 //static void maybe_revenge(struct chanset_t *, char *, char *, int);
 static bool detect_chan_flood(char *, char *, char *, struct chanset_t *, int,
 			     char *);
@@ -109,6 +108,7 @@ static void get_channel_masks(struct chanset_t* chan);
 
 #endif /* MAKING_IRC */
 
+void my_setkey(struct chanset_t *, char *);
 void force_join_chan(struct chanset_t* chan, int idx = DP_MODE);
 void join_chan(struct chanset_t* chan, int idx = DP_MODE);