}
static svccmd_unbind_func_t *suf_list;
+static void **suf_list_extra;
unsigned int suf_size, suf_used;
void
-reg_svccmd_unbind_func(svccmd_unbind_func_t handler) {
+reg_svccmd_unbind_func(svccmd_unbind_func_t handler, void *extra) {
if (suf_used == suf_size) {
if (suf_size) {
suf_size <<= 1;
suf_list = realloc(suf_list, suf_size*sizeof(svccmd_unbind_func_t));
+ suf_list_extra = realloc(suf_list_extra, suf_size*sizeof(void*));
} else {
suf_size = 8;
suf_list = malloc(suf_size*sizeof(svccmd_unbind_func_t));
+ suf_list_extra = malloc(suf_size*sizeof(void*));
}
}
- suf_list[suf_used++] = handler;
+ suf_list[suf_used] = handler;
+ suf_list_extra[suf_used++] = extra;
}
static MODCMD_FUNC(cmd_unbind) {
}
for (ii=0; ii<suf_used; ii++)
- suf_list[ii](bound);
+ suf_list[ii](bound, suf_list_extra[ii]);
/* If this command binding is removing itself, we must take care
* not to dereference it after the dict_remove.
*/
}
void
-modcmd_cleanup(void) {
+modcmd_cleanup(UNUSED_ARG(void* extra)) {
dict_delete(services);
dict_delete(modules);
if (suf_list)
free(suf_list);
+ if (suf_list_extra)
+ free(suf_list_extra);
}
static void
services = dict_new();
dict_set_free_data(services, free_service);
reg_nick_change_func(modcmd_nick_change, NULL);
- reg_exit_func(modcmd_cleanup);
+ reg_exit_func(modcmd_cleanup, NULL);
conf_register_reload(modcmd_conf_read);
modcmd_module = module_register("modcmd", MAIN_LOG, "modcmd.help", modcmd_expand);