]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/channel.c
Allow pre-defined server local channels ("&").
[ngircd-alex.git] / src / ngircd / channel.c
index 609bbf5b5e976c19a30f2ba7e32103b482ee5cbb..29b8becdcb221e62d896b2d5449eb96405d38b68 100644 (file)
@@ -97,55 +97,52 @@ Channel_InitPredefined( void )
 {
        /* Generate predefined persistent channels */
 
-       CHANNEL *chan;
-       char *c;
-       unsigned int i;
+       CHANNEL *new_chan;
+       const struct Conf_Channel *conf_chan;
+       const char *c;
+       size_t i, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
 
-       for( i = 0; i < Conf_Channel_Count; i++ )
-       {
-               /* Check for Name configuration */
-               if( ! Conf_Channel[i].name[0] ) continue;
+       conf_chan = array_start(&Conf_Channels);
 
-               /* Check for invalid channel name */
-               if( ! Channel_IsValidName( Conf_Channel[i].name ))
-               {
-                       Log( LOG_ERR, "Can't create pre-defined channel: invalid name: \"%s\"!", Conf_Channel[i].name );
-                       array_free(&Conf_Channel[i].topic);
+       assert(channel_count == 0 || conf_chan != NULL);
+
+       for (i = 0; i < channel_count; i++, conf_chan++) {
+               if (!conf_chan->name[0] || !Channel_IsValidName(conf_chan->name)) {
+                       Log(LOG_ERR, "Can't create pre-defined channel: invalid name: \"%s\"",
+                                                                       conf_chan->name);
                        continue;
                }
 
-               /* Check if the channel name is already in use */
-               chan = Channel_Search( Conf_Channel[i].name );
-               if( chan )
-               {
-                       Log( LOG_INFO, "Can't create pre-defined channel \"%s\": name already in use.", Conf_Channel[i].name );
-                       array_free(&Conf_Channel[i].topic);
+               new_chan = Channel_Search(conf_chan->name);
+               if (new_chan) {
+                       Log(LOG_INFO, "Can't create pre-defined channel \"%s\": name already in use.",
+                                                                               conf_chan->name);
                        continue;
                }
 
-               /* Create channel */
-               chan = Channel_Create(Conf_Channel[i].name);
-               if (chan) {
-                       Channel_ModeAdd(chan, 'P');
+               new_chan = Channel_Create(conf_chan->name);
+               if (!new_chan) {
+                       Log(LOG_ERR, "Can't create pre-defined channel \"%s\"",
+                                                       conf_chan->name);
+                       continue;
+               }
 
-                       if (array_start(&Conf_Channel[i].topic) != NULL)
-                               Channel_SetTopic(chan, NULL,
-                                        array_start(&Conf_Channel[i].topic));
-                       array_free(&Conf_Channel[i].topic);
+               Channel_ModeAdd(new_chan, 'P');
 
-                       c = Conf_Channel[i].modes;
-                       while (*c)
-                               Channel_ModeAdd(chan, *c++);
+               if (conf_chan->topic[0])
+                       Channel_SetTopic(new_chan, NULL, conf_chan->topic);
 
-                       Channel_SetKey(chan, Conf_Channel[i].key);
-                       Channel_SetMaxUsers(chan, Conf_Channel[i].maxusers);
+               c = conf_chan->modes;
+               while (*c)
+                       Channel_ModeAdd(new_chan, *c++);
 
-                       Log(LOG_INFO, "Created pre-defined channel \"%s\".",
-                                                       Conf_Channel[i].name );
-               }
-               else Log(LOG_ERR, "Can't create pre-defined channel \"%s\"!",
-                                                       Conf_Channel[i].name );
+               Channel_SetKey(new_chan, conf_chan->key);
+               Channel_SetMaxUsers(new_chan, conf_chan->maxusers);
+               Log(LOG_INFO, "Created pre-defined channel \"%s\"",
+                                               conf_chan->name);
        }
+       if (channel_count)
+               array_free(&Conf_Channels);
 } /* Channel_InitPredefined */
 
 
@@ -690,7 +687,7 @@ Channel_TopicWho(CHANNEL *Chan)
 
 
 GLOBAL void
-Channel_SetTopic(CHANNEL *Chan, CLIENT *Client, char *Topic)
+Channel_SetTopic(CHANNEL *Chan, CLIENT *Client, const char *Topic)
 {
        size_t len;
        assert( Chan != NULL );
@@ -728,7 +725,7 @@ Channel_SetModes( CHANNEL *Chan, char *Modes )
 
 
 GLOBAL void
-Channel_SetKey( CHANNEL *Chan, char *Key )
+Channel_SetKey( CHANNEL *Chan, const char *Key )
 {
        assert( Chan != NULL );
        assert( Key != NULL );
@@ -806,7 +803,7 @@ Channel_Write(CHANNEL *Chan, CLIENT *From, CLIENT *Client, const char *Command,
 
 
 GLOBAL CHANNEL *
-Channel_Create( char *Name )
+Channel_Create( const char *Name )
 {
        /* Create new CHANNEL structure and add it to linked list */
        CHANNEL *c;