diff --git a/Changes b/Changes index 946b22a67..a7d565675 100644 --- a/Changes +++ b/Changes @@ -2149,3 +2149,5 @@ seen. gmtime warning still there - Updated example.conf about U-lines since many people set them wrong. - Fixed numeric checking. - Moved /stats zip from NOTICE to RPL_TEXT, updated stats documentation. +- Made it so it is no longer necessary to copy the ModuleInfo structure passed to Mod_Test + and Mod_Init. Unreal now does this internally. diff --git a/include/modules.h b/include/modules.h index ad0248b0e..acda2b841 100644 --- a/include/modules.h +++ b/include/modules.h @@ -152,6 +152,7 @@ struct _Module unsigned char flags; /* 8-bits for flags .. */ ModuleChild *children; ModuleObject *objects; + ModuleInfo modinfo; /* Used to store handle info for module */ }; /* * Symbol table diff --git a/src/modules.c b/src/modules.c index f40203c7b..d44256558 100644 --- a/src/modules.c +++ b/src/modules.c @@ -121,7 +121,6 @@ char *Module_Create(char *path_) int ret = 0; Module *mod = NULL, **Mod_Handle = NULL; int betaversion,tag; - ModuleInfo modinfo; Debug((DEBUG_DEBUG, "Attempting to load module from %s", path_)); path = path_; @@ -197,10 +196,7 @@ char *Module_Create(char *path_) if (Mod_Test) { if (betaversion >= 8) { - modinfo.size = sizeof(ModuleInfo); - modinfo.module_load = 0; - modinfo.handle = mod; - if ((ret = (*Mod_Test)(&modinfo)) < MOD_SUCCESS) { + if ((ret = (*Mod_Test)(&mod->modinfo)) < MOD_SUCCESS) { ircsprintf(errorbuf, "Mod_Test returned %i", ret); /* We EXPECT the module to have cleaned up it's mess */ @@ -263,6 +259,9 @@ Module *Module_make(ModuleHeader *header, modp->dll = mod; modp->flags = MODFLAG_NONE; modp->children = NULL; + modp->modinfo.size = sizeof(ModuleInfo); + modp->modinfo.module_load = 0; + modp->modinfo.handle = modp; return (modp); } @@ -272,7 +271,6 @@ void Init_all_testing_modules(void) Module *mi, *next; int betaversion, tag, ret; iFP Mod_Init; - ModuleInfo modinfo; for (mi = Modules; mi; mi = next) { next = mi->next; @@ -281,10 +279,7 @@ void Init_all_testing_modules(void) irc_dlsym(mi->dll, "Mod_Init", Mod_Init); sscanf(mi->header->modversion, "3.2-b%d-%d", &betaversion, &tag); if (betaversion >= 8) { - modinfo.size = sizeof(ModuleInfo); - modinfo.module_load = 0; - modinfo.handle = mi; - if ((ret = (*Mod_Init)(&modinfo)) < MOD_SUCCESS) { + if ((ret = (*Mod_Init)(&mi->modinfo)) < MOD_SUCCESS) { config_error("Error loading %s: Mod_Init returned %i", mi->header->name, ret); Module_free(mi); diff --git a/src/modules/l_commands.c b/src/modules/l_commands.c index f9c849eac..9c178edb4 100644 --- a/src/modules/l_commands.c +++ b/src/modules/l_commands.c @@ -48,7 +48,7 @@ #endif extern ModuleHeader m_svsnoop_Header; -ModuleInfo ModCmdsInfo; +ModuleInfo *ModCmdsInfo; /* Place includes here */ /* replace this with a common name of your module */ #ifdef DYNAMIC_LINKING @@ -136,8 +136,8 @@ int l_commands_Test(ModuleInfo *modinfo) #ifdef SCAN_API Module p; #endif - bcopy(modinfo,&ModCmdsInfo,modinfo->size); - m_htm_Test(&ModCmdsInfo); + ModCmdsInfo = modinfo; + m_htm_Test(ModCmdsInfo); return MOD_SUCCESS; } @@ -155,54 +155,53 @@ int l_commands_Init(ModuleInfo *modinfo) /* * We call our add_Command crap here */ - bcopy(modinfo,&ModCmdsInfo,modinfo->size); - module_load = ModCmdsInfo.module_load; - m_sethost_Init(&ModCmdsInfo); - m_setname_Init(&ModCmdsInfo); - m_chghost_Init(&ModCmdsInfo); - m_chgident_Init(&ModCmdsInfo); - m_setident_Init(&ModCmdsInfo); - m_sdesc_Init(&ModCmdsInfo); - m_svsmode_Init(&ModCmdsInfo); - m_swhois_Init(&ModCmdsInfo); - m_svsmotd_Init(&ModCmdsInfo); - m_svsnline_Init(&ModCmdsInfo); - m_who_Init(&ModCmdsInfo); - m_mkpasswd_Init(&ModCmdsInfo); - m_away_Init(&ModCmdsInfo); - m_svsnoop_Init(&ModCmdsInfo); - m_svso_Init(&ModCmdsInfo); - m_svsnick_Init(&ModCmdsInfo); - m_adminchat_Init(&ModCmdsInfo); - m_nachat_Init(&ModCmdsInfo); - m_lag_Init(&ModCmdsInfo); - m_rping_Init(&ModCmdsInfo); - m_sendumode_Init(&ModCmdsInfo); - m_tsctl_Init(&ModCmdsInfo); - m_htm_Init(&ModCmdsInfo); - m_chgname_Init(&ModCmdsInfo); - m_message_Init(&ModCmdsInfo); - m_whois_Init(&ModCmdsInfo); - m_quit_Init(&ModCmdsInfo); - m_kill_Init(&ModCmdsInfo); - m_pingpong_Init(&ModCmdsInfo); - m_oper_Init(&ModCmdsInfo); - m_akill_Init(&ModCmdsInfo); - m_rakill_Init(&ModCmdsInfo); - m_unzline_Init(&ModCmdsInfo); - m_unkline_Init(&ModCmdsInfo); - m_sqline_Init(&ModCmdsInfo); - m_unsqline_Init(&ModCmdsInfo); - m_tkl_Init(&ModCmdsInfo); - m_vhost_Init(&ModCmdsInfo); - m_cycle_Init(&ModCmdsInfo); - m_svsjoin_Init(&ModCmdsInfo); - m_svspart_Init(&ModCmdsInfo); - m_svswatch_Init(&ModCmdsInfo); - m_svssilence_Init(&ModCmdsInfo); - m_svslusers_Init(&ModCmdsInfo); + module_load = ModCmdsInfo->module_load; + m_sethost_Init(ModCmdsInfo); + m_setname_Init(ModCmdsInfo); + m_chghost_Init(ModCmdsInfo); + m_chgident_Init(ModCmdsInfo); + m_setident_Init(ModCmdsInfo); + m_sdesc_Init(ModCmdsInfo); + m_svsmode_Init(ModCmdsInfo); + m_swhois_Init(ModCmdsInfo); + m_svsmotd_Init(ModCmdsInfo); + m_svsnline_Init(ModCmdsInfo); + m_who_Init(ModCmdsInfo); + m_mkpasswd_Init(ModCmdsInfo); + m_away_Init(ModCmdsInfo); + m_svsnoop_Init(ModCmdsInfo); + m_svso_Init(ModCmdsInfo); + m_svsnick_Init(ModCmdsInfo); + m_adminchat_Init(ModCmdsInfo); + m_nachat_Init(ModCmdsInfo); + m_lag_Init(ModCmdsInfo); + m_rping_Init(ModCmdsInfo); + m_sendumode_Init(ModCmdsInfo); + m_tsctl_Init(ModCmdsInfo); + m_htm_Init(ModCmdsInfo); + m_chgname_Init(ModCmdsInfo); + m_message_Init(ModCmdsInfo); + m_whois_Init(ModCmdsInfo); + m_quit_Init(ModCmdsInfo); + m_kill_Init(ModCmdsInfo); + m_pingpong_Init(ModCmdsInfo); + m_oper_Init(ModCmdsInfo); + m_akill_Init(ModCmdsInfo); + m_rakill_Init(ModCmdsInfo); + m_unzline_Init(ModCmdsInfo); + m_unkline_Init(ModCmdsInfo); + m_sqline_Init(ModCmdsInfo); + m_unsqline_Init(ModCmdsInfo); + m_tkl_Init(ModCmdsInfo); + m_vhost_Init(ModCmdsInfo); + m_cycle_Init(ModCmdsInfo); + m_svsjoin_Init(ModCmdsInfo); + m_svspart_Init(ModCmdsInfo); + m_svswatch_Init(ModCmdsInfo); + m_svssilence_Init(ModCmdsInfo); + m_svslusers_Init(ModCmdsInfo); #ifdef GUEST - m_guest_Init(&ModCmdsInfo); + m_guest_Init(ModCmdsInfo); #endif return MOD_SUCCESS; } diff --git a/src/modules/m_guest.c b/src/modules/m_guest.c index f3a7ba01e..0a66dd16a 100644 --- a/src/modules/m_guest.c +++ b/src/modules/m_guest.c @@ -62,7 +62,7 @@ ModuleHeader Mod_Header NULL }; -ModuleInfo ModGuestInfo; +ModuleInfo *ModGuestInfo; /* The purpose of these ifdefs, are that we can "static" link the ircd if we * want to */ @@ -78,8 +78,8 @@ int m_guest_Init(ModuleInfo *modinfo) * We call our add_Command crap here */ #ifdef GUEST - bcopy(modinfo,&ModGuestInfo,modinfo.size); - GuestHook = HookAddEx(ModGuestInfo.handle, HOOKTYPE_GUEST, m_guest); + ModGuestInfo = modinfo; + GuestHook = HookAddEx(ModGuestInfo->handle, HOOKTYPE_GUEST, m_guest); #endif return MOD_SUCCESS; diff --git a/src/modules/m_htm.c b/src/modules/m_htm.c index ee297066f..feea1bb59 100644 --- a/src/modules/m_htm.c +++ b/src/modules/m_htm.c @@ -69,7 +69,7 @@ DLLFUNC int htm_config_test(ConfigFile *, ConfigEntry *, int, int *); DLLFUNC int htm_config_run(ConfigFile *, ConfigEntry *, int); DLLFUNC int htm_stats(aClient *, char *); -ModuleInfo HtmModInfo; +ModuleInfo *HtmModInfo; static Hook *ConfTest, *ConfRun, *ServerStats; #ifndef DYNAMIC_LINKING ModuleHeader m_htm_Header @@ -99,8 +99,8 @@ int m_htm_Test(ModuleInfo *modinfo) /* * We call our add_Command crap here */ - bcopy(modinfo,&HtmModInfo,modinfo->size); - ConfTest = HookAddEx(HtmModInfo.handle, HOOKTYPE_CONFIGTEST, htm_config_test); + HtmModInfo = modinfo; + ConfTest = HookAddEx(HtmModInfo->handle, HOOKTYPE_CONFIGTEST, htm_config_test); return MOD_SUCCESS; } @@ -116,12 +116,12 @@ int m_htm_Init(ModuleInfo *modinfo) * We call our add_Command crap here */ add_Command(MSG_HTM, TOK_HTM, m_htm, MAXPARA); - ConfRun = HookAddEx(HtmModInfo.handle, HOOKTYPE_CONFIGRUN, htm_config_run); - ServerStats = HookAddEx(HtmModInfo.handle, HOOKTYPE_STATS, htm_stats); + ConfRun = HookAddEx(HtmModInfo->handle, HOOKTYPE_CONFIGRUN, htm_config_run); + ServerStats = HookAddEx(HtmModInfo->handle, HOOKTYPE_STATS, htm_stats); #ifndef NO_FDLIST LockEventSystem(); - e_lcf = EventAddEx(HtmModInfo.handle, "lcf", LCF, 0, lcf_check, NULL); - e_htmcalc = EventAddEx(HtmModInfo.handle, "htmcalc", 1, 0, htm_calc, NULL); + e_lcf = EventAddEx(HtmModInfo->handle, "lcf", LCF, 0, lcf_check, NULL); + e_htmcalc = EventAddEx(HtmModInfo->handle, "htmcalc", 1, 0, htm_calc, NULL); UnlockEventSystem(); #endif return MOD_SUCCESS;