From 4e9cffed86ab94ee8a8d7556c1eca638a2566296 Mon Sep 17 00:00:00 2001 From: Michael Poole Date: Tue, 22 May 2007 22:39:39 -0400 Subject: [PATCH] Fix unreg_{notice,privmsg}_func(). proto.h: Remove the useless second parameter. proto-bahamut.c: Implement the functions. proto-p10.c: Make them non-buggy. --- src/proto-bahamut.c | 24 ++++++++++++++++++++++++ src/proto-p10.c | 43 ++++++++++++++----------------------------- src/proto.h | 4 ++-- 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/proto-bahamut.c b/src/proto-bahamut.c index d2edc2a..0e8309f 100644 --- a/src/proto-bahamut.c +++ b/src/proto-bahamut.c @@ -1173,6 +1173,18 @@ reg_privmsg_func(struct userNode *user, privmsg_func_t handler) { info->on_privmsg = handler; } +void +unreg_privmsg_func(struct userNode *user) { + struct service_message_info *info; + info = dict_find(service_msginfo_dict, user->nick, NULL); + if (info) { + info->on_privmsg = NULL; + if (info->on_notice == NULL) { + dict_remove(service_msginfo_dict, user->nick); + } + } +} + void reg_notice_func(struct userNode *user, privmsg_func_t handler) { struct service_message_info *info = dict_find(service_msginfo_dict, user->nick, NULL); @@ -1183,6 +1195,18 @@ reg_notice_func(struct userNode *user, privmsg_func_t handler) { info->on_notice = handler; } +void +unreg_notice_func(struct userNode *user) { + struct service_message_info *info; + info = dict_find(service_msginfo_dict, user->nick, NULL); + if (info) { + info->on_notice = NULL; + if (info->on_privmsg == NULL) { + dict_remove(service_msginfo_dict, user->nick); + } + } +} + void reg_oper_func(oper_func_t handler) { diff --git a/src/proto-p10.c b/src/proto-p10.c index ddde78e..49705cf 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -2749,9 +2749,10 @@ reg_privmsg_func(struct userNode *user, privmsg_func_t handler) { unsigned int numeric = user->num_local; if (numeric >= num_privmsg_funcs) { - int newnum = numeric + 8; + int newnum = numeric + 8, ii; privmsg_funcs = realloc(privmsg_funcs, newnum*sizeof(privmsg_func_t)); - memset(privmsg_funcs+num_privmsg_funcs, 0, (newnum-num_privmsg_funcs)*sizeof(privmsg_func_t)); + for (ii = num_privmsg_funcs; ii < newnum; ++ii) + privmsg_funcs[ii] = NULL; num_privmsg_funcs = newnum; } if (privmsg_funcs[numeric]) @@ -2760,20 +2761,12 @@ reg_privmsg_func(struct userNode *user, privmsg_func_t handler) } void -unreg_privmsg_func(struct userNode *user, privmsg_func_t handler) +unreg_privmsg_func(struct userNode *user) { - unsigned int x; + if (!IsLocal(user) || user->num_local >= num_privmsg_funcs) + return; /* this really only works with users */ - if (!user || handler) - return; /* this really only works with users */ - - memset(privmsg_funcs+user->num_local, 0, sizeof(privmsg_func_t)); - - for (x = user->num_local+1; x < num_privmsg_funcs; x++) - memmove(privmsg_funcs+x-1, privmsg_funcs+x, sizeof(privmsg_func_t)); - - privmsg_funcs = realloc(privmsg_funcs, num_privmsg_funcs*sizeof(privmsg_func_t)); - num_privmsg_funcs--; + privmsg_funcs[user->num_local] = NULL; } @@ -2782,9 +2775,10 @@ reg_notice_func(struct userNode *user, privmsg_func_t handler) { unsigned int numeric = user->num_local; if (numeric >= num_notice_funcs) { - int newnum = numeric + 8; + int newnum = numeric + 8, ii; notice_funcs = realloc(notice_funcs, newnum*sizeof(privmsg_func_t)); - memset(notice_funcs+num_notice_funcs, 0, (newnum-num_notice_funcs)*sizeof(privmsg_func_t)); + for (ii = num_privmsg_funcs; ii < newnum; ++ii) + privmsg_funcs[ii] = NULL; num_notice_funcs = newnum; } if (notice_funcs[numeric]) @@ -2793,21 +2787,12 @@ reg_notice_func(struct userNode *user, privmsg_func_t handler) } void -unreg_notice_func(struct userNode *user, privmsg_func_t handler) +unreg_notice_func(struct userNode *user) { - unsigned int x; - - if (!user || handler) - return; /* this really only works with users */ - - memset(notice_funcs+user->num_local, 0, sizeof(privmsg_func_t)); - - for (x = user->num_local+1; x < num_notice_funcs; x++) - memmove(notice_funcs+x-1, notice_funcs+x, sizeof(privmsg_func_t)); + if (!IsLocal(user) || user->num_local >= num_privmsg_funcs) + return; /* this really only works with users */ - memset(notice_funcs+user->num_local, 0, sizeof(privmsg_func_t)); - notice_funcs = realloc(notice_funcs, num_notice_funcs*sizeof(privmsg_func_t)); - num_notice_funcs--; + notice_funcs[user->num_local] = NULL; } void diff --git a/src/proto.h b/src/proto.h index bf9657b..e595522 100644 --- a/src/proto.h +++ b/src/proto.h @@ -98,8 +98,8 @@ struct userNode *get_chanmsg_bot(unsigned char prefix); typedef void (*privmsg_func_t) (struct userNode *user, struct userNode *target, const char *text, int server_qualified); void reg_privmsg_func(struct userNode *user, privmsg_func_t handler); void reg_notice_func(struct userNode *user, privmsg_func_t handler); -void unreg_privmsg_func(struct userNode *user, privmsg_func_t handler); -void unreg_notice_func(struct userNode *user, privmsg_func_t handler); +void unreg_privmsg_func(struct userNode *user); +void unreg_notice_func(struct userNode *user); typedef void (*oper_func_t) (struct userNode *user); void reg_oper_func(oper_func_t handler); -- 2.20.1