]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/proto-common.c
roll version to 1.8.1 for conversion to git repository
[irc/evilnet/x3.git] / src / proto-common.c
index 05203f6094f6b5635b2a32528d1dab5156494002..92d797492eb9ccb42f1c99ebb5e952b0485de2ae 100644 (file)
@@ -26,6 +26,7 @@
 #include "spamserv.h"
 #include "shun.h"
 #include "timeq.h"
+#include "version.h"
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
 #endif
@@ -370,7 +371,7 @@ static CMD_FUNC(cmd_version)
         log_module(MAIN_LOG, LOG_ERROR, "Could not find VERSION origin user %s", origin);
         return 0;
     }
-    irc_numeric(user, 351, "%s %s %s", PACKAGE_TARNAME, PACKAGE_VERSION, self->name);
+    irc_numeric(user, 351, "%s %s+[%s] %s", PACKAGE_TARNAME, PACKAGE_VERSION, cvs_version, self->name);
     return 1;
 }
 
@@ -520,21 +521,25 @@ get_chanmsg_bot(unsigned char prefix)
 }
 
 static mode_change_func_t *mcf_list;
+static void **mcf_list_extra;
 static unsigned int mcf_size = 0, mcf_used = 0;
 
 void
-reg_mode_change_func(mode_change_func_t handler)
+reg_mode_change_func(mode_change_func_t handler, void *extra)
 {
     if (mcf_used == mcf_size) {
        if (mcf_size) {
                mcf_size <<= 1;
                mcf_list = realloc(mcf_list, mcf_size*sizeof(mode_change_func_t));
+        mcf_list_extra = realloc(mcf_list_extra, mcf_size*sizeof(void*));
        } else {
                mcf_size = 8;
                mcf_list = malloc(mcf_size*sizeof(mode_change_func_t));
+        mcf_list_extra = malloc(mcf_size*sizeof(void*));
        }
     }
-    mcf_list[mcf_used++] = handler;
+    mcf_list[mcf_used] = handler;
+    mcf_list_extra[mcf_used++] = extra;
 }
 
 static oper_func_t *of_list;
@@ -749,7 +754,7 @@ mod_chanmode(struct userNode *who, struct chanNode *channel, char **modes, unsig
         mod_chanmode_apply(who, channel, change);
     if (flags & MC_NOTIFY)
         for (ii = 0; ii < mcf_used; ++ii)
-            mcf_list[ii](channel, who, change);
+            mcf_list[ii](channel, who, change, mcf_list_extra[ii]);
     mod_chanmode_free(change);
     return 1;
 }
@@ -768,21 +773,25 @@ irc_make_chanmode(struct chanNode *chan, char *out)
 }
 
 static user_mode_func_t *um_list;
+static void **um_list_extra;
 static unsigned int um_size = 0, um_used = 0;
 
 void
-reg_user_mode_func(user_mode_func_t handler)
+reg_user_mode_func(user_mode_func_t handler, void *extra)
 {
        if (um_used == um_size) {
                if (um_size) {
                        um_size <<= 1;
                        um_list = realloc(um_list, um_size*sizeof(user_mode_func_t));
+            um_list_extra = realloc(um_list_extra, um_size*sizeof(void*));
                } else {
                        um_size = 8;
                        um_list = malloc(um_size*sizeof(user_mode_func_t));
+            um_list_extra = malloc(um_size*sizeof(void*));
                }
        }
-       um_list[um_used++] = handler;
+       um_list[um_used] = handler;
+    um_list_extra[um_used++] = extra;
 }
 
 void
@@ -802,26 +811,30 @@ call_user_mode_funcs(struct userNode *user, const char *mode_change)
 {
        unsigned int n;
        for (n=0; n<um_used; n++) {
-               um_list[n](user, mode_change);
+               um_list[n](user, mode_change, um_list_extra[n]);
        }
 }
 
 static channel_mode_func_t *cm_list;
+static void **cm_list_extra;
 static unsigned int cm_size = 0, cm_used = 0;
 
 void
-reg_channel_mode_func(channel_mode_func_t handler)
+reg_channel_mode_func(channel_mode_func_t handler, void *extra)
 {
        if (cm_used == cm_size) {
                if (cm_size) {
                        cm_size <<= 1;
                        cm_list = realloc(cm_list, cm_size*sizeof(channel_mode_func_t));
+            cm_list_extra = realloc(cm_list_extra, cm_size*sizeof(void*));
                } else {
                        cm_size = 8;
                        cm_list = malloc(cm_size*sizeof(channel_mode_func_t));
+            cm_list_extra = malloc(cm_size*sizeof(void*));
                }
        }
-       cm_list[cm_used++] = handler;
+       cm_list[cm_used] = handler;
+    cm_list_extra[cm_used++] = extra;
 }
 
 void
@@ -841,7 +854,7 @@ call_channel_mode_funcs(struct userNode *who, struct chanNode *channel, char **m
 {
        unsigned int n;
        for (n=0; n<cm_used; n++) {
-               cm_list[n](who, channel, modes, argc);
+               cm_list[n](who, channel, modes, argc, cm_list_extra[n]);
        }
 }