tried to reorder the program structure and build process
[NeonServV5.git] / src / BanNode.c
1
2 #include "BanNode.h"
3 #include "ChanNode.h"
4 #include "tools.h"
5
6 struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
7     struct BanNode *ban = malloc(sizeof(*ban));
8     ban->chan = chan;
9     ban->mask = strdup(mask);
10     ban->next = chan->bans;
11     chan->bans = ban;
12     return ban;
13 }
14
15 struct BanNode* getMatchingChannelBan(struct ChanNode *chan, char *mask) {
16     struct BanNode *cban;
17     for(cban = chan->bans; cban; cban = cban->next) {
18         if(!match(cban->mask, mask)) {
19             return cban;
20         }
21     }
22     return NULL;
23 }
24
25 void removeChannelBanMask(struct ChanNode *chan, char *mask) {
26     struct BanNode *cban, *last = NULL;
27     for(cban = chan->bans; cban; cban = cban->next) {
28         if(!strcmp(cban->mask, mask)) {
29             if(last)
30                 last->next = cban->next;
31             else
32                 chan->bans = cban->next;
33             free(cban->mask);
34             free(cban);
35             break;
36         } else 
37             last = cban;
38     }
39 }
40
41 void removeChannelBan(struct BanNode *ban) {
42     struct BanNode *cban, *last = NULL;
43     struct ChanNode *chan = ban->chan;
44     for(cban = chan->bans; cban; cban = cban->next) {
45         if(cban == ban) {
46             if(last)
47                 last->next = ban->next;
48             else
49                 chan->bans = ban->next;
50             free(ban->mask);
51             free(ban);
52             break;
53         } else 
54             last = cban;
55     }
56 }
57
58 void removeChannelBans(struct ChanNode *chan) {
59     struct BanNode *ban, *next;
60     for(ban = chan->bans; ban; ban = next) {
61         next = ban->next;
62         free(ban->mask);
63         free(ban);
64     }
65     chan->bans = NULL;
66 }