added simple channel ban cache
[NeonServV5.git] / BanNode.c
1
2 #include "BanNode.h"
3 #include "ChanNode.h"
4
5 struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
6     struct BanNode *ban = malloc(sizeof(*ban));
7     ban->chan = chan;
8     ban->mask = strdup(mask);
9     ban->next = chan->bans;
10     chan->bans = ban;
11 }
12
13 void removeChannelBanMask(struct ChanNode *chan, char *mask) {
14     struct BanNode *cban, *last = NULL;
15     for(cban = chan->bans; cban; cban = cban->next) {
16         if(!strcmp(cban->mask, mask)) {
17             if(last)
18                 last->next = ban->next;
19             else
20                 chan->bans = ban->next;
21             free(ban->mask);
22             free(ban);
23             break;
24         } else 
25             last = ban;
26     }
27 }
28
29 void removeChannelBan(struct BanNode *ban) {
30     struct BanNode *cban, *last = NULL;
31     struct ChanNode *chan = ban->chan;
32     for(cban = chan->bans; cban; cban = cban->next) {
33         if(cban == ban) {
34             if(last)
35                 last->next = ban->next;
36             else
37                 chan->bans = ban->next;
38             free(ban->mask);
39             free(ban);
40             break;
41         } else 
42             last = ban;
43     }
44 }
45
46 void removeChannelBans(struct ChanNode *chan) {
47     struct BanNode *ban, *next;
48     for(ban = chan->bans; ban; ban = next) {
49         next = ban->next;
50         free(ban->mask);
51         free(ban);
52     }
53     channel->bans = NULL;
54 }