+
+#include "BanNode.h"
+#include "ChanNode.h"
+
+struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
+ struct BanNode *ban = malloc(sizeof(*ban));
+ ban->chan = chan;
+ ban->mask = strdup(mask);
+ ban->next = chan->bans;
+ chan->bans = ban;
+}
+
+void removeChannelBanMask(struct ChanNode *chan, char *mask) {
+ struct BanNode *cban, *last = NULL;
+ for(cban = chan->bans; cban; cban = cban->next) {
+ if(!strcmp(cban->mask, mask)) {
+ if(last)
+ last->next = ban->next;
+ else
+ chan->bans = ban->next;
+ free(ban->mask);
+ free(ban);
+ break;
+ } else
+ last = ban;
+ }
+}
+
+void removeChannelBan(struct BanNode *ban) {
+ struct BanNode *cban, *last = NULL;
+ struct ChanNode *chan = ban->chan;
+ for(cban = chan->bans; cban; cban = cban->next) {
+ if(cban == ban) {
+ if(last)
+ last->next = ban->next;
+ else
+ chan->bans = ban->next;
+ free(ban->mask);
+ free(ban);
+ break;
+ } else
+ last = ban;
+ }
+}
+
+void removeChannelBans(struct ChanNode *chan) {
+ struct BanNode *ban, *next;
+ for(ban = chan->bans; ban; ban = next) {
+ next = ban->next;
+ free(ban->mask);
+ free(ban);
+ }
+ channel->bans = NULL;
+}