return NULL;
}
-struct ChanNode* addChannel(const char *chan) {
- return NULL; //to be continued
+struct ChanNode* addChannel(const char *name) {
+ int chanListIndex = get_chanlist_entry(name[1]);
+ if(chanListIndex == -1 || !is_valid_chan(name))
+ return NULL;
+ struct ChanNode *chan = malloc(sizeof(*chan));
+ if (!chan)
+ {
+ perror("malloc() failed");
+ return NULL;
+ }
+ strcpy(chan->name, name);
+ chan->user = NULL;
+ chan->topic[0] = 0;
+ chan->flags = 0;
+ chan->next = chanList[chanListIndex];
+ chanList[chanListIndex] = chan;
+ return chan;
}
void delChannel(struct ChanNode* chan, int freeChan) {
- //to be continued
+ int chanListIndex = get_chanlist_entry(chan->name[1]);
+ if(chanListIndex == -1) return;
+ struct ChanNode *cchan, *last_chan = NULL;
+ for(cchan = chanList[chanListIndex]; cchan; cchan = cchan->next) {
+ if(cchan == chan) {
+ if(last_chan)
+ last_chan->next = chan->next;
+ else
+ chanList[chanListIndex] = chan->next;
+ break;
+ } else
+ last_chan = cchan;
+ }
+ if(freeChan)
+ free(chan);
+ else
+ chan->next = NULL;
}