+/* BanNode.c - NeonServ v5.4
+ * Copyright (C) 2011-2012 Philipp Kreil (pk910)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
#include "BanNode.h"
#include "ChanNode.h"
struct BanNode *ban = malloc(sizeof(*ban));
ban->chan = chan;
ban->mask = strdup(mask);
+ SYNCHRONIZE(cache_sync);
ban->next = chan->bans;
chan->bans = ban;
+ DESYNCHRONIZE(cache_sync);
return ban;
}
struct BanNode* getMatchingChannelBan(struct ChanNode *chan, char *mask) {
+ SYNCHRONIZE(cache_sync);
struct BanNode *cban;
for(cban = chan->bans; cban; cban = cban->next) {
if(!match(cban->mask, mask)) {
+ DESYNCHRONIZE(cache_sync);
return cban;
}
}
+ DESYNCHRONIZE(cache_sync);
return NULL;
}
void removeChannelBanMask(struct ChanNode *chan, char *mask) {
+ SYNCHRONIZE(cache_sync);
struct BanNode *cban, *last = NULL;
for(cban = chan->bans; cban; cban = cban->next) {
if(!strcmp(cban->mask, mask)) {
} else
last = cban;
}
+ DESYNCHRONIZE(cache_sync);
}
void removeChannelBan(struct BanNode *ban) {
+ SYNCHRONIZE(cache_sync);
struct BanNode *cban, *last = NULL;
struct ChanNode *chan = ban->chan;
for(cban = chan->bans; cban; cban = cban->next) {
} else
last = cban;
}
+ DESYNCHRONIZE(cache_sync);
}
void removeChannelBans(struct ChanNode *chan) {
+ SYNCHRONIZE(cache_sync);
struct BanNode *ban, *next;
for(ban = chan->bans; ban; ban = next) {
next = ban->next;
free(ban);
}
chan->bans = NULL;
+ DESYNCHRONIZE(cache_sync);
}