X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/63c0b8ad3980b46f5c9052c1966a36ce15f6e440..ee8c50bd99dd250596c44c78baee59128a9cbdb6:/src/hash.c diff --git a/src/hash.c b/src/hash.c index 55f0c5d..a1a661f 100644 --- a/src/hash.c +++ b/src/hash.c @@ -597,21 +597,25 @@ AddChannel(const char *name, time_t time_, const char *modes, char *banlist, cha } static del_channel_func_t *dcf_list; +static void **dcf_list_extra; static unsigned int dcf_size = 0, dcf_used = 0; void -reg_del_channel_func(del_channel_func_t handler) +reg_del_channel_func(del_channel_func_t handler, void *extra) { if (dcf_used == dcf_size) { if (dcf_size) { dcf_size <<= 1; dcf_list = realloc(dcf_list, dcf_size*sizeof(dcf_list[0])); + dcf_list_extra = realloc(dcf_list_extra, dcf_size*sizeof(void*)); } else { dcf_size = 8; dcf_list = malloc(dcf_size*sizeof(dcf_list[0])); + dcf_list_extra = malloc(dcf_size*sizeof(dcf_list_extra[0])); } } - dcf_list[dcf_used++] = handler; + dcf_list[dcf_used] = handler; + dcf_list_extra[dcf_used++] = extra; } static void @@ -641,7 +645,7 @@ DelChannel(struct chanNode *channel) channel->exemptlist.used = 0; for (n=0; nmembers); banList_clean(&channel->banlist); @@ -697,33 +701,38 @@ AddChannelUser(struct userNode *user, struct chanNode* channel) } static part_func_t *pf_list; +static void **pf_list_extra; static unsigned int pf_size = 0, pf_used = 0; void -reg_part_func(part_func_t handler) +reg_part_func(part_func_t handler, void *extra) { if (pf_used == pf_size) { if (pf_size) { pf_size <<= 1; pf_list = realloc(pf_list, pf_size*sizeof(part_func_t)); + pf_list_extra = realloc(pf_list_extra, pf_size*sizeof(void*)); } else { pf_size = 8; pf_list = malloc(pf_size*sizeof(part_func_t)); + pf_list_extra = malloc(pf_size*sizeof(void*)); } } - pf_list[pf_used++] = handler; + pf_list[pf_used] = handler; + pf_list_extra[pf_used++] = extra; } void -unreg_part_func(part_func_t handler) +unreg_part_func(part_func_t handler, void *extra) { unsigned int i; for (i=0; iidle_since = now; for (n=0; n