X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fproto-common.c;h=bc37f32a13aa945940a109cba3d627f620120c43;hb=fffe459760943b6ed8e0bb736c87ef424ce38fdc;hp=3b424d45d715b41301c095a9bf1e9d3ed944ce46;hpb=23609de645133c4a2fa6b913ef677300fe9357b8;p=srvx.git diff --git a/src/proto-common.c b/src/proto-common.c index 3b424d4..bc37f32 100644 --- a/src/proto-common.c +++ b/src/proto-common.c @@ -577,6 +577,34 @@ call_oper_funcs(struct userNode *user) } } +static xquery_func_t *xqf_list; +static unsigned int xqf_size = 0, xqf_used = 0; + +void +reg_xquery_func(xquery_func_t handler) +{ + if (xqf_used == xqf_size) { + if (xqf_size) { + xqf_size <<= 1; + xqf_list = realloc(xqf_list, xqf_size*sizeof(xquery_func_t)); + } else { + xqf_size = 8; + xqf_list = malloc(xqf_size*sizeof(xquery_func_t)); + } + } + xqf_list[xqf_used++] = handler; +} + +static void +call_xquery_funcs(struct server *source, const char routing[], const char query[]) +{ + unsigned int n; + for (n=0; n < xqf_used; n++) + { + xqf_list[n](source, routing, query); + } +} + struct mod_chanmode * mod_chanmode_alloc(unsigned int argc) { @@ -709,7 +737,7 @@ mod_chanmode(struct userNode *who, struct chanNode *channel, char **modes, unsig base_oplevel = member->oplevel; else base_oplevel = MAXOPLEVEL; - if (!(change = mod_chanmode_parse(channel, modes, argc, flags, base_oplevel))) + if (!(change = mod_chanmode_parse(channel, who, modes, argc, flags, base_oplevel))) return 0; if (flags & MC_ANNOUNCE) mod_chanmode_announce(who, channel, change);