added ChanUser.c and basic cache system
[NeonServV5.git] / ChanNode.c
index e4e59de01cb8ed2402d19d0f20bcac1b3d7b29f5..77071243119f886af200ca12f2579d538cdd65be 100644 (file)
@@ -64,10 +64,41 @@ struct ChanNode* getChanByName(const char *name) { //case insensitive
     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;
 }