]> jfr.im git - irc/evilnet/x3.git/commitdiff
add extra parameter to kick_func
authorhstuart <redacted>
Tue, 24 Nov 2009 19:44:51 +0000 (19:44 +0000)
committerhstuart <redacted>
Tue, 24 Nov 2009 19:44:51 +0000 (19:44 +0000)
ChangeLog
src/chanserv.c
src/hash.c
src/hash.h
src/mod-snoop.c
src/mod-track.c

index b4fb9388495d4698962e926fc1081df60b240aa8..4a0f2df4fb5be87972fe312a94313924e0bb7b9f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,14 @@
 /***********************************************************************
 X3 ChangeLog
 
+2009-11-24  Henrik Stuart  <evilnet@hstuart.dk>
+
+       * src/hash.c src/hash.h: add extra parameter to reg_kick_func and
+       kick_func_t.
+
+       * src/chanserv.c src/mod-snoop.c src/mod-track.c: collateral evolution
+       fixes due to kick_func change.
+
 2009-11-24  Henrik Stuart  <evilnet@hstuart.dk>
 
        * src/hash.c src/hash.h: add extra parameter to reg_part_func,
index 258e76a8607d948b5f0e0430277b492b15dad84d..d05a4e5813f7a7ddaf8e4bc1f79d66c98c68e540 100644 (file)
@@ -8745,7 +8745,7 @@ handle_part(struct modeNode *mn, UNUSED_ARG(const char *reason), UNUSED_ARG(void
 }
 
 static void
-handle_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *channel)
+handle_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *channel, UNUSED_ARG(void *extra))
 {
     struct userData *uData;
 
index ffacb316224ade720aaa2a0949cda2f4df2ac6bb..a1a661f1e07734823350a2eee3f0afd2a0b66b55 100644 (file)
@@ -785,6 +785,7 @@ DelChannelUser(struct userNode* user, struct chanNode* channel, const char *reas
 }
 
 static kick_func_t *kf_list;
+static void **kf_list_extra;
 static unsigned int kf_size = 0, kf_used = 0;
 
 void
@@ -797,7 +798,7 @@ KickChannelUser(struct userNode* target, struct chanNode* channel, struct userNo
 
     /* This may break things, but lets see.. -Rubin */
     for (n=0; n<kf_used; n++)
-        kf_list[n](kicker, target, channel);
+        kf_list[n](kicker, target, channel, kf_list_extra[n]);
 
     /* don't remove them from the channel, since the server will send a PART */
     irc_kick(kicker, target, channel, why);
@@ -811,18 +812,21 @@ KickChannelUser(struct userNode* target, struct chanNode* channel, struct userNo
 }
 
 void
-reg_kick_func(kick_func_t handler)
+reg_kick_func(kick_func_t handler, void *extra)
 {
     if (kf_used == kf_size) {
        if (kf_size) {
            kf_size <<= 1;
            kf_list = realloc(kf_list, kf_size*sizeof(kick_func_t));
+        kf_list_extra = realloc(kf_list_extra, kf_size*sizeof(void*));
        } else {
            kf_size = 8;
            kf_list = malloc(kf_size*sizeof(kick_func_t));
+        kf_list_extra = malloc(kf_size*sizeof(void*));
        }
     }
-    kf_list[kf_used++] = handler;
+    kf_list[kf_used] = handler;
+    kf_list_extra[kf_used++] = extra;
 }
 
 void
@@ -839,7 +843,7 @@ ChannelUserKicked(struct userNode* kicker, struct userNode* victim, struct chanN
         mn->idle_since = now;
 
     for (n=0; n<kf_used; n++)
-       kf_list[n](kicker, victim, channel);
+       kf_list[n](kicker, victim, channel, kf_list_extra[n]);
 
     DelChannelUser(victim, channel, 0, 0);
 
@@ -1024,6 +1028,7 @@ hash_cleanup(void)
     free(pf_list);
     free(pf_list_extra);
     free(kf_list);
+    free(kf_list_extra);
     free(tf_list);
     free(tf_list_extra);
 }
index 851cdffcbafb29a1adca1379e43cf261749c26d4..a330ed40884d834fe92a3682005596b000fe170e 100644 (file)
@@ -418,8 +418,8 @@ void unreg_part_func(part_func_t handler, void *extra);
 void DelChannelUser(struct userNode* user, struct chanNode* channel, const char *reason, int deleting);
 void KickChannelUser(struct userNode* target, struct chanNode* channel, struct userNode *kicker, const char *why);
 
-typedef void (*kick_func_t) (struct userNode *kicker, struct userNode *user, struct chanNode *chan);
-void reg_kick_func(kick_func_t handler);
+typedef void (*kick_func_t) (struct userNode *kicker, struct userNode *user, struct chanNode *chan, void *extra);
+void reg_kick_func(kick_func_t handler, void *extra);
 void ChannelUserKicked(struct userNode* kicker, struct userNode* victim, struct chanNode* channel);
 
 int ChannelBanExists(struct chanNode *channel, const char *ban);
index 6b1f198f5bcb3f490e1d7d17af0cd0cec0d01694..efefdab4426ea7bde40b833ed7e913c3528621f8 100644 (file)
@@ -93,7 +93,7 @@ snoop_part(struct modeNode *mn, const char *reason, UNUSED_ARG(void *extra)) {
 }
 
 static void
-snoop_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *chan) {
+snoop_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *chan, UNUSED_ARG(void *extra)) {
     if (!snoop_cfg.enabled) return;
     UPDATE_TIMESTAMP();
     SNOOP("$bKICK$b %s from %s by %s", victim->nick, chan->name, (kicker ? kicker->nick : "some server"));
index 2ab41cf862dc4827a457cc99862a7a186a26474f..f465bab747aac49014410a553768926711bc4afa 100644 (file)
@@ -234,7 +234,7 @@ track_part(struct modeNode *mn, const char *reason, UNUSED_ARG(void *extra)) {
 }
 
 static void
-track_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *chan) {
+track_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *chan, UNUSED_ARG(void *extra)) {
     if (!track_cfg.enabled) return;
     if (check_track_kick(track_cfg) && ((check_track_user(kicker->nick) || check_track_user(victim->nick))))
     {