fix possible crash on user deletion
[srvx.git] / src / modcmd.h
index c9dbee963821776a7aecdcb6b481752d0835782d..763efd9f42b972dad3444a8f0282905ae2b517fd 100644 (file)
@@ -1,5 +1,5 @@
 /* modcmd.h - Generalized module command support
- * Copyright 2002-2004 srvx Development Team
+ * Copyright 2002-2006 srvx Development Team
  *
  * This file is part of srvx.
  *
@@ -32,17 +32,18 @@ struct modcmd;
 
 #define MODCMD_FUNC(NAME) int NAME(struct userNode *user, UNUSED_ARG(struct chanNode *channel), UNUSED_ARG(unsigned int argc), UNUSED_ARG(char **argv), UNUSED_ARG(struct svccmd *cmd))
 typedef MODCMD_FUNC(modcmd_func_t);
-#define SVCMSG_HOOK(NAME) int NAME(struct userNode *user, struct userNode *target, char *text, int server_qualified);
+#define SVCMSG_HOOK(NAME) int NAME(struct userNode *user, struct userNode *target, const char *text, int server_qualified)
 typedef SVCMSG_HOOK(svcmsg_hook_t);
 
 DECLARE_LIST(svccmd_list, struct svccmd*);
 DECLARE_LIST(module_list, struct module*);
 
-#if defined(__GNUC__) && (__GNUC__ < 3)
-#define reply(FMT...) send_message(user, cmd->parent->bot, FMT)
-#elif !defined(S_SPLINT_S) /* doesn't recognize C99 variadic macros */
-#define reply(...) send_message(user, cmd->parent->bot, __VA_ARGS__)
+#if defined(GCC_VARMACROS)
+# define reply(ARGS...) send_message(user, cmd->parent->bot, ARGS)
+#elif defined(C99_VARMACROS)
+# define reply(...) send_message(user, cmd->parent->bot, __VA_ARGS__)
 #endif
+
 #define modcmd_get_handle_info(USER, NAME) smart_get_handle_info(cmd->parent->bot, USER, NAME)
 #define modcmd_chanmode_announce(CHANGE) mod_chanmode_announce(cmd->parent->bot, channel, CHANGE)
 #define modcmd_chanmode(ARGV, ARGC, FLAGS) mod_chanmode(cmd->parent->bot, channel, ARGV, ARGC, FLAGS)
@@ -75,6 +76,12 @@ DECLARE_LIST(module_list, struct module*);
 #define SVCCMD_DEBIT                  0x000002
 #define SVCCMD_NOISY                  0x000004
 
+/* We do not use constants for 0 (no logging) and 1 (regular logging) as those
+ * are used very often and are intuitive enough.
+ */
+#define CMD_LOG_STAFF       0x02
+#define CMD_LOG_OVERRIDE    0x04
+
 /* Modularized commands work like this:
  *
  * Modules define commands.  Services contain "bindings" of those
@@ -118,6 +125,7 @@ struct svccmd {
     unsigned long req_account_flags;
     unsigned long deny_account_flags;
     unsigned int min_opserv_level;
+    unsigned int min_staff_level;
     unsigned int min_channel_access;
     unsigned int effective_flags;
 };