Added some module hooks in places that local_ calls were from local.c
authorRick Bird <nveid@bender.theari.com>
Sat, 2 Apr 2011 21:00:06 +0000 (17:00 -0400)
committerRick Bird <nveid@bender.theari.com>
Sat, 2 Apr 2011 21:00:06 +0000 (17:00 -0400)
hdrs/modules.h
src/bsd.c
src/game.c
src/modules.c
src/player.c
src/timer.c

index 8664dc5ce6aebed12c5b848e5f4f3c5c9d0e6944..5b1c30f799325524312d2bb2a0d454f0d4cac3d0 100644 (file)
@@ -28,7 +28,11 @@ int modules_shutdown(void);
 /* Retrieve Module Function */
 #define MODULE_FUNC(h, m, func, ...) \
   if((h = lt_dlsym(m, func))) { \
-    h(__VAR_ARGS__) \
+    h(__VA_ARGS__); \
+  }
+#define MODULE_FUNC_NOARGS(h, m, func) \
+  if((h = lt_dlsym(m, func))) { \
+    h(); \
   }
 
 #define MODULE_FUNCRET(m, func) lt_dlsym(m, func);
index 12ada57d1578b699dacd193c338e4a4c6d2a2d79..11350bc4a646363929ced400f0aec6e921e96e56 100644 (file)
--- a/src/bsd.c
+++ b/src/bsd.c
@@ -82,6 +82,7 @@
 #define AUTORESTART
 #endif
 #include <setjmp.h>
+#include <ltdl.h>
 
 #include "conf.h"
 
 #include "modules.h"
 #include "lua.h"
 #include "mushlua.h"
+#include "modules.h"
 #ifdef HAS_WAITPID
 /** What does wait*() return? */
 #define WAIT_TYPE int
 #define FD_ISSET(n,p)    (*p & (1<<(n)))
 #endif                          /* defines for BSD 4.2 */
 
+
+extern struct module_entry_t *module_list;
 #ifdef HAS_GETRUSAGE
 void rusage_stats(void);
 #endif
@@ -2857,6 +2861,9 @@ parse_puebloclient(DESC *d, char *command)
 static int
 dump_messages(DESC *d, dbref player, int isnew)
 {
+  struct module_entry_t *m;
+  void (*handle)(dbref, int, int);
+
   int is_hidden;
   int num = 0;
   DESC *tmpd;
@@ -2934,6 +2941,9 @@ dump_messages(DESC *d, dbref player, int isnew)
   if (Haven(player))
     notify(player, T("Your HAVEN flag is set. You cannot receive pages."));
   local_connect(player, isnew, num);
+  MODULE_ITER(m)
+    MODULE_FUNC(handle, m->handle, "module_connect", player, isnew, num);
+
   return 1;
 }
 
index 6f27b776529822f2cfffbcc40873c21b36550e68..c516547551508481a2ee84c4bd1f7df4b9a38fa7 100644 (file)
@@ -42,6 +42,7 @@ void Win32MUSH_setup(void);
 #include <unistd.h>
 #endif
 #include <errno.h>
+#include <ltdl.h>
 
 #include "conf.h"
 #include "externs.h"
@@ -73,6 +74,7 @@ void Win32MUSH_setup(void);
 #include "help.h"
 #include "dbio.h"
 #include "pcre.h"
+#include "modules.h"
 
 #ifdef hpux
 #include <sys/syscall.h>
@@ -100,6 +102,7 @@ static dbref *errdblist = NULL; /**< List of dbrefs to return errors from */
 static dbref *errdbtail;        /**< Pointer to end of errdblist */
 static int errdbsize = 4;       /**< Current size of errdblist array */
 extern int use_flagfile;
+extern struct module_entry_t *module_list;
 
 static void errdb_grow(void);
 
@@ -332,6 +335,9 @@ dump_database_internal(void)
   char realtmpfl[2048];
   char tmpfl[2048];
   FILE *f = NULL;
+  struct module_entry_t *m;
+  void (*handle)();
+
 
 #ifndef PROFILING
 #ifndef WIN32
@@ -351,6 +357,8 @@ dump_database_internal(void)
     return 1;
   } else {
     local_dump_database();
+    MODULE_ITER(m)
+      MODULE_FUNC_NOARGS(handle, m->handle, "module_dump_database");
 
 #ifdef ALWAYS_PARANOID
     paranoid_checkpt = db_top / 5;
@@ -751,6 +759,9 @@ extern struct db_stat_info current_state;
 void
 init_game_config(const char *conf)
 {
+  struct module_entry_t *m;
+  void (*handler)();
+
   int a;
 
   global_eval_context.process_command_port = 0;
@@ -794,6 +805,9 @@ init_game_config(const char *conf)
 
   /* Load all the config file stuff except restrict_* */
   local_configs();
+  MODULE_ITER(m)
+    MODULE_FUNC_NOARGS(handler, m->handle, "module_configs");
+
   conf_default_set();
   config_file_startup(conf, 0);
   start_all_logs();
@@ -817,6 +831,9 @@ init_game_config(const char *conf)
 void
 init_game_postdb(const char *conf)
 {
+  struct module_entry_t *m;
+  void (*handle)();
+
   /* access file stuff */
   read_access_file();
   /* initialize random number generator */
@@ -839,6 +856,10 @@ init_game_postdb(const char *conf)
 #endif /* CRON */
   /* Call Local Startup */
   local_startup();
+  MODULE_ITER(m)
+    MODULE_FUNC_NOARGS(handle, m->handle, "module_startup");
+
+
   /* everything else ok. Restart all objects. */
   do_restart();
 #ifdef HAS_OPENSSL
index 210ce585cfa9af3a2a0ce85cbdcb14e0903d4ff8..b8058165aa5ad1ac05885b50586c7012ccd9355c 100644 (file)
@@ -42,8 +42,11 @@ struct module_entry_t *module_entry_add(char *name) {
 int module_entry_del(struct module_entry_t *entry) {
   struct module_entry_t *m, *e = NULL;
 
-  if(module_list == entry)
+  if(module_list == entry) {
     e = module_list;
+    module_list = NULL;
+  }
+
   else MODULE_ITER(m)
     if(m->next != NULL && m->next == entry) {
       e = m;
index b7ca9141f74e2fb9f333de97f0a337a40cac3075..72fc8dc1720c5de5d9aae9cee514cd5cd576f5f4 100644 (file)
@@ -23,6 +23,7 @@
 #include <sys/types.h>
 #endif
 #include <fcntl.h>
+#include <ltdl.h>
 
 #include "conf.h"
 #include "externs.h"
@@ -36,6 +37,7 @@
 #include "flags.h"
 #include "lock.h"
 #include "parse.h"
+#include "modules.h"
 
 #ifdef HAS_CRYPT
 #ifdef I_CRYPT
@@ -44,6 +46,7 @@
 extern char *crypt(const char *, const char *);
 #endif
 #endif
+extern struct module_entry_t *module_list;
 
 #include "extmail.h"
 #include "confmagic.h"
@@ -414,6 +417,8 @@ make_player(const char *name, const char *password, const char *host,
   dbref player;
   char temp[SBUF_LEN];
   object_flag_type flags;
+  struct module_entry_t *m;
+  void (*handle)(dbref player);
 
   player = new_object();
 
@@ -460,6 +465,9 @@ make_player(const char *name, const char *password, const char *host,
   current_state.players++;
 
   local_data_create(player);
+  MODULE_ITER(m)
+    MODULE_FUNC(handle, m->handle, "module_data_create", player);
+
 
   return player;
 }
index 15b0a5ab80053148213517b5262531799adb87d6..f661c76c64ff62fee6911686713b5dd151f45e31 100644 (file)
@@ -25,6 +25,7 @@
 #ifdef I_UNISTD
 #include <unistd.h>
 #endif
+#include <ltdl.h>
 
 #include "conf.h"
 #include "externs.h"
 #include "help.h"
 #include "parse.h"
 #include "confmagic.h"
+#include "modules.h"
 
+/* Module extern */
+extern struct module_entry_t *module_list;
 
 static sig_atomic_t hup_triggered = 0;
 static sig_atomic_t usr1_triggered = 0;
@@ -205,6 +209,8 @@ void
 dispatch(void)
 {
   static int idle_counter = 0;
+  struct module_entry_t *m;
+  void (*handle)(void);
 
   /* A HUP reloads configuration and reopens logs */
   if (hup_triggered) {
@@ -295,6 +301,9 @@ dispatch(void)
 #endif
 
   local_timer();
+
+  MODULE_ITER(m)
+    MODULE_FUNC_NOARGS(handle, m->handle, "module_timer");
 }
 
 sig_atomic_t cpu_time_limit_hit = 0;  /** Was the cpu time limit hit? */