X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/5a2c7cf6485440d208e5f0ec319e22b6fa317a41..ee8c50bd99dd250596c44c78baee59128a9cbdb6:/src/hash.c diff --git a/src/hash.c b/src/hash.c index 51c355c..a1a661f 100644 --- a/src/hash.c +++ b/src/hash.c @@ -153,7 +153,7 @@ reg_nick_change_func(nick_change_func_t handler, void *extra) } } ncf2_list[ncf2_used] = handler; - ncf2_list[ncf2_used++] = extra; + ncf2_list_extra[ncf2_used++] = extra; } @@ -403,21 +403,25 @@ set_geoip_info(struct userNode *user) } static new_channel_func_t *ncf_list; +static void **ncf_list_extra; static unsigned int ncf_size = 0, ncf_used = 0; void -reg_new_channel_func(new_channel_func_t handler) +reg_new_channel_func(new_channel_func_t handler, void *extra) { if (ncf_used == ncf_size) { if (ncf_size) { ncf_size <<= 1; ncf_list = realloc(ncf_list, ncf_size*sizeof(ncf_list[0])); + ncf_list_extra = realloc(ncf_list_extra, ncf_size*sizeof(void*)); } else { ncf_size = 8; ncf_list = malloc(ncf_size*sizeof(ncf_list[0])); + ncf_list_extra = malloc(ncf_size*sizeof(void*)); } } - ncf_list[ncf_used++] = handler; + ncf_list[ncf_used] = handler; + ncf_list_extra[ncf_used++] = extra; } static join_func_t *jf_list; @@ -553,7 +557,7 @@ AddChannel(const char *name, time_t time_, const char *modes, char *banlist, cha /* if it's a new or updated channel, make callbacks */ if (rel_age > 0) for (nn=0; nn= 0)) { @@ -593,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 @@ -637,7 +645,7 @@ DelChannel(struct chanNode *channel) channel->exemptlist.used = 0; for (n=0; nmembers); banList_clean(&channel->banlist); @@ -693,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