changed Makefile; build all commands as an own file
[NeonServV5.git] / BanNode.c
index 45ba19988ebc6f5cb7390f0eea91863bdeeedebc..c1601f15d827bf9147fdbdff52fd0cac89479b33 100644 (file)
--- a/BanNode.c
+++ b/BanNode.c
@@ -1,6 +1,7 @@
 
 #include "BanNode.h"
 #include "ChanNode.h"
+#include "tools.h"
 
 struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
     struct BanNode *ban = malloc(sizeof(*ban));
@@ -8,6 +9,17 @@ struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
     ban->mask = strdup(mask);
     ban->next = chan->bans;
     chan->bans = ban;
+    return ban;
+}
+
+struct BanNode* getMatchingChannelBan(struct ChanNode *chan, char *mask) {
+    struct BanNode *cban;
+    for(cban = chan->bans; cban; cban = cban->next) {
+        if(!match(cban->mask, mask)) {
+            return cban;
+        }
+    }
+    return NULL;
 }
 
 void removeChannelBanMask(struct ChanNode *chan, char *mask) {
@@ -15,14 +27,14 @@ void removeChannelBanMask(struct ChanNode *chan, char *mask) {
     for(cban = chan->bans; cban; cban = cban->next) {
         if(!strcmp(cban->mask, mask)) {
             if(last)
-                last->next = ban->next;
+                last->next = cban->next;
             else
-                chan->bans = ban->next;
-            free(ban->mask);
-            free(ban);
+                chan->bans = cban->next;
+            free(cban->mask);
+            free(cban);
             break;
         } else 
-            last = ban;
+            last = cban;
     }
 }
 
@@ -39,7 +51,7 @@ void removeChannelBan(struct BanNode *ban) {
             free(ban);
             break;
         } else 
-            last = ban;
+            last = cban;
     }
 }
 
@@ -50,5 +62,5 @@ void removeChannelBans(struct ChanNode *chan) {
         free(ban->mask);
         free(ban);
     }
-    channel->bans = NULL;
+    chan->bans = NULL;
 }