X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/f14e4f83088ec0316a241872d798fe8c58fca061..cde20a3f04531cb55f78fe6d7e609612f8041b33:/src/proto-common.c diff --git a/src/proto-common.c b/src/proto-common.c index 0cff85a..f662406 100644 --- a/src/proto-common.c +++ b/src/proto-common.c @@ -23,6 +23,7 @@ #include "ioset.h" #include "log.h" #include "nickserv.h" +#include "shun.h" #include "timeq.h" #ifdef HAVE_SYS_SOCKET_H #include @@ -506,11 +507,11 @@ reg_mode_change_func(mode_change_func_t handler) { if (mcf_used == mcf_size) { if (mcf_size) { - mcf_size <<= 1; - mcf_list = realloc(mcf_list, mcf_size*sizeof(mode_change_func_t)); + mcf_size <<= 1; + mcf_list = realloc(mcf_list, mcf_size*sizeof(mode_change_func_t)); } else { - mcf_size = 8; - mcf_list = malloc(mcf_size*sizeof(mode_change_func_t)); + mcf_size = 8; + mcf_list = malloc(mcf_size*sizeof(mode_change_func_t)); } } mcf_list[mcf_used++] = handler; @@ -626,13 +627,23 @@ mod_chanmode_apply(struct userNode *who, struct chanNode *channel, struct mod_ch break; } break; + /* XXX Hack: this is the stupedest use of switch iv ever seen. + * you have to compare for EVERY POSSIBLE COMBINATION of bitmask + * because switch does only full comparison. This needs redone as if/else. + **/ case MODE_CHANOP: case MODE_HALFOP: case MODE_VOICE: + case MODE_VOICE|MODE_CHANOP: + case MODE_VOICE|MODE_HALFOP: + case MODE_CHANOP|MODE_HALFOP: case MODE_VOICE|MODE_CHANOP|MODE_HALFOP: case MODE_REMOVE|MODE_CHANOP: case MODE_REMOVE|MODE_HALFOP: case MODE_REMOVE|MODE_VOICE: + case MODE_REMOVE|MODE_VOICE|MODE_CHANOP: + case MODE_REMOVE|MODE_VOICE|MODE_HALFOP: + case MODE_REMOVE|MODE_CHANOP|MODE_HALFOP: case MODE_REMOVE|MODE_VOICE|MODE_CHANOP|MODE_HALFOP: if (change->args[ii].mode & MODE_REMOVE) change->args[ii].u.member->modes &= ~change->args[ii].mode;