--- /dev/null
+
+#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;
+}
--- /dev/null
+#ifndef _BanNode_h
+#define _BanNode_h
+#include "main.h"
+
+struct ChanNode;
+
+struct BanNode {
+ char *mask;
+ struct ChanNode *chan;
+
+ struct BanNode *next;
+};
+
+struct BanNode* addChannelBan(struct ChanNode *chan, char *mask);
+void removeChannelBanMask(char *mask);
+void removeChannelBan(struct BanNode *ban);
+void removeChannelBans(struct ChanNode *chan);
+
+#endif
\ No newline at end of file
}
strcpy(chan->name, name);
chan->user = NULL;
+ chan->bans = NULL;
chan->usercount = 0;
chan->chanbot = NULL;
chan->topic[0] = 0;
}
static void parseModesBan(struct ChanNode* chan, int add, char *mask) {
- //to be continued...
+ if(add)
+ addChannelBan(chan, mask);
+ else
+ removeChannelBanMask(chan, mask);
}
void parseModes(struct ChanNode* chan, char *modeStr, char **argv, int argc) {