X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Fchannel.c;h=6958831ad79ce678db1c3c58366cf54b328dd75a;hb=18efc7469c5923a298a218ee2d17f518cff184fa;hp=609bbf5b5e976c19a30f2ba7e32103b482ee5cbb;hpb=0eda085f1e001cb1f2381ffe3ca70299d32632d3;p=ngircd-alex.git diff --git a/src/ngircd/channel.c b/src/ngircd/channel.c index 609bbf5b..6958831a 100644 --- a/src/ngircd/channel.c +++ b/src/ngircd/channel.c @@ -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; @@ -1089,9 +1086,9 @@ Delete_Channel( CHANNEL *Chan ) Log( LOG_DEBUG, "Freed channel structure for \"%s\".", Chan->name ); - /* free invite and ban lists */ - Lists_Free( &chan->list_bans ); - Lists_Free( &chan->list_invites ); + array_free(&chan->topic); + Lists_Free(&chan->list_bans); + Lists_Free(&chan->list_invites); /* maintain channel list */ if( last_chan ) last_chan->next = chan->next;