mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-09 18:49:03 -04:00
Encode module API version in the init_module symbol; fixes conflic with glibc-exported init_module
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11863 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
0d9a2dc982
commit
2602f4efbd
@ -104,7 +104,9 @@ struct ModResult {
|
||||
}
|
||||
};
|
||||
|
||||
/** If you change the module API in any way, increment this value. */
|
||||
/** If you change the module API in any way, increment this value.
|
||||
* This MUST be a pure integer, with no parenthesis
|
||||
*/
|
||||
#define API_VERSION 133
|
||||
|
||||
class ServerConfig;
|
||||
@ -1733,6 +1735,16 @@ class CoreExport ModuleManager : public classbase
|
||||
const std::vector<std::string> GetAllModuleNames(int filter);
|
||||
};
|
||||
|
||||
/** Do not mess with these functions unless you know the C preprocessor
|
||||
* well enough to explain why they are needed. The order is important.
|
||||
*/
|
||||
#define MODULE_INIT_STR MODULE_INIT_STR_FN_2(MODULE_INIT_SYM)
|
||||
#define MODULE_INIT_STR_FN_2(x) MODULE_INIT_STR_FN_1(x)
|
||||
#define MODULE_INIT_STR_FN_1(x) #x
|
||||
#define MODULE_INIT_SYM MODULE_INIT_SYM_FN_2(API_VERSION)
|
||||
#define MODULE_INIT_SYM_FN_2(x) MODULE_INIT_SYM_FN_1(x)
|
||||
#define MODULE_INIT_SYM_FN_1(x) inspircd_module_ ## x
|
||||
|
||||
/** This definition is used as shorthand for the various classes
|
||||
* and functions needed to make a module loadable by the OS.
|
||||
* It defines the class factory and external init_module function.
|
||||
@ -1740,7 +1752,7 @@ class CoreExport ModuleManager : public classbase
|
||||
#ifdef WINDOWS
|
||||
|
||||
#define MODULE_INIT(y) \
|
||||
extern "C" DllExport Module * init_module() \
|
||||
extern "C" DllExport Module * MODULE_INIT_SYM() \
|
||||
{ \
|
||||
return new y; \
|
||||
} \
|
||||
@ -1758,7 +1770,7 @@ class CoreExport ModuleManager : public classbase
|
||||
#else
|
||||
|
||||
#define MODULE_INIT(y) \
|
||||
extern "C" DllExport Module * init_module() \
|
||||
extern "C" DllExport Module * MODULE_INIT_SYM() \
|
||||
{ \
|
||||
return new y; \
|
||||
}
|
||||
|
@ -11,8 +11,6 @@
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
/* $Core */
|
||||
|
||||
#include "inspircd.h"
|
||||
#include "dynamic.h"
|
||||
#ifndef WIN32
|
||||
@ -53,7 +51,7 @@ Module* DLLManager::callInit()
|
||||
return NULL;
|
||||
|
||||
init_t initfn;
|
||||
initfn.vptr = dlsym(h, "init_module");
|
||||
initfn.vptr = dlsym(h, MODULE_INIT_STR);
|
||||
if (!initfn.vptr)
|
||||
{
|
||||
err = dlerror();
|
||||
|
Loading…
x
Reference in New Issue
Block a user