]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/channel.c
Cleanups to 005 code, from ratbox (androsyn).
[irc/rqf/shadowircd.git] / src / channel.c
index 9be36d2b554422988706ec268b66b9ce18ba6958..757524d090d30152747dcd6bd3d793686799e933 100644 (file)
@@ -21,7 +21,7 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
  *  USA
  *
- *  $Id: channel.c 3259 2007-03-15 18:09:08Z jilles $
+ *  $Id: channel.c 3580 2007-11-07 23:45:14Z jilles $
  */
 
 #include "stdinc.h"
@@ -93,7 +93,7 @@ allocate_channel(const char *chname)
 {
        struct Channel *chptr;
        chptr = BlockHeapAlloc(channel_heap);
-       DupNString(chptr->chname, chname, CHANNELLEN);
+       DupString(chptr->chname, chname);
        return (chptr);
 }
 
@@ -109,8 +109,8 @@ allocate_ban(const char *banstr, const char *who)
 {
        struct Ban *bptr;
        bptr = BlockHeapAlloc(ban_heap);
-       DupNString(bptr->banstr, banstr, BANLEN);
-       DupNString(bptr->who, who, BANLEN);
+       DupString(bptr->banstr, banstr);
+       DupString(bptr->who, who);
 
        return (bptr);
 }
@@ -384,6 +384,7 @@ destroy_channel(struct Channel *chptr)
        free_channel_list(&chptr->banlist);
        free_channel_list(&chptr->exceptlist);
        free_channel_list(&chptr->invexlist);
+       free_channel_list(&chptr->quietlist);
 
        /* Free the topic */
        free_topic(chptr);
@@ -930,12 +931,12 @@ check_spambot_warning(struct Client *source_p, const char *name)
                {
                        /* Its already known as a possible spambot */
                        if(name != NULL)
-                               sendto_realops_snomask(SNO_BOTS, L_ALL,
+                               sendto_realops_snomask(SNO_BOTS, L_NETWIDE,
                                                     "User %s (%s@%s) trying to join %s is a possible spambot",
                                                     source_p->name,
                                                     source_p->username, source_p->orighost, name);
                        else
-                               sendto_realops_snomask(SNO_BOTS, L_ALL,
+                               sendto_realops_snomask(SNO_BOTS, L_NETWIDE,
                                                     "User %s (%s@%s) is a possible spambot",
                                                     source_p->name,
                                                     source_p->username, source_p->orighost);
@@ -1083,11 +1084,7 @@ set_channel_topic(struct Channel *chptr, const char *topic, const char *topic_in
        }
 }
 
-static const struct mode_letter
-{
-       const unsigned int mode;
-       const unsigned char letter;
-} flags[] =
+const struct mode_letter chmode_flags[] =
 {
        {MODE_INVITEONLY, 'i'},
        {MODE_MODERATED, 'm'},
@@ -1110,9 +1107,8 @@ static const struct mode_letter
  *
  * inputs       - pointer to channel
  *              - pointer to client
- * output       - NONE
- * side effects - write the "simple" list of channel modes for channel
- * chptr onto buffer mbuf with the parameters in pbuf.
+ * output       - string with simple modes
+ * side effects - result from previous calls overwritten
  *
  * Stolen from ShadowIRCd 4 --nenolod
  */
@@ -1129,46 +1125,47 @@ channel_modes(struct Channel *chptr, struct Client *client_p)
        *mbuf++ = '+';
        *pbuf = '\0';
 
-       for (i = 0; flags[i].mode; ++i)
-               if(chptr->mode.mode & flags[i].mode)
-                       *mbuf++ = flags[i].letter;
+       for (i = 0; chmode_flags[i].mode; ++i)
+               if(chptr->mode.mode & chmode_flags[i].mode)
+                       *mbuf++ = chmode_flags[i].letter;
 
        if(chptr->mode.limit)
        {
                *mbuf++ = 'l';
 
-               if(IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p))
-                       pbuf += ircsprintf(pbuf, "%d ", chptr->mode.limit);
+               if(!IsClient(client_p) || IsMember(client_p, chptr))
+                       pbuf += ircsprintf(pbuf, " %d", chptr->mode.limit);
        }
 
        if(*chptr->mode.key)
        {
                *mbuf++ = 'k';
 
-               if(*pbuf || IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p))
-                       pbuf += ircsprintf(pbuf, "%s ", chptr->mode.key);
+               if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr))
+                       pbuf += ircsprintf(pbuf, " %s", chptr->mode.key);
        }
 
        if(chptr->mode.join_num)
        {
                *mbuf++ = 'j';
 
-               if(*pbuf || IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p))
-                       pbuf += ircsprintf(pbuf, "%d:%d ", chptr->mode.join_num,
+               if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr))
+                       pbuf += ircsprintf(pbuf, " %d:%d", chptr->mode.join_num,
                                           chptr->mode.join_time);
        }
 
-       if(*chptr->mode.forward && (ConfigChannel.use_forward || IsServer(client_p) || IsMe(client_p)))
+       if(*chptr->mode.forward && (ConfigChannel.use_forward || !IsClient(client_p)))
        {
                *mbuf++ = 'f';
 
-               if(*pbuf || IsMember(client_p, chptr) || IsServer(client_p) || IsMe(client_p))
-                       pbuf += ircsprintf(pbuf, "%s ", chptr->mode.forward);
+               if(pbuf > buf2 || !IsClient(client_p) || IsMember(client_p, chptr))
+                       pbuf += ircsprintf(pbuf, " %s", chptr->mode.forward);
        }
 
        *mbuf = '\0';
 
-       ircsprintf(final, "%s %s", buf1, buf2);
+       strlcpy(final, buf1, sizeof final);
+       strlcat(final, buf2, sizeof final);
        return final;
 }