#ifndef INCLUDED_modules_h
#define INCLUDED_modules_h
-#include "config.h"
+#include "serno.h"
+#include "defaults.h"
#include "setup.h"
#include "parse.h"
const char *version;
const char *description;
lt_dlhandle address;
- int core;
- int origin;
+ int core; /* This is int for backwards compat reasons */
+ int origin; /* Ditto */
int mapi_version;
void *mapi_header; /* actually struct mapi_mheader_av<mapi_version> */
+ rb_dlink_node node;
};
#define MAPI_MAGIC_HDR 0x4D410000
int cap_index; /* Which cap index does this belong to? */
const char *cap_name; /* Capability name */
void *cap_ownerdata; /* Not used much but why not... */
- int *cap_id; /* May be set to non-NULL to store cap id */
+ unsigned int *cap_id; /* May be set to non-NULL to store cap id */
} mapi_cap_list_av2;
struct mapi_mheader_av1
};
#define MAPI_ORIGIN_UNKNOWN 0 /* Unknown provenance (AV1 etc.) */
-#define MAPI_ORIGIN_EXTERNAL 1 /* Came from outside charybdis */
-#define MAPI_ORIGIN_EXTENSION 2 /* Charybdis bundled extension */
-#define MAPI_ORIGIN_CORE 3 /* Charybdis core module */
+#define MAPI_ORIGIN_EXTENSION 1 /* Charybdis extension */
+#define MAPI_ORIGIN_CORE 2 /* Charybdis core module */
struct mapi_mheader_av2
{
int mapi_version; /* Module API version */
- int mapi_origin; /* Module provenance */
int (*mapi_register)(void); /* Register function; ret -1 = failure (unload) */
void (*mapi_unregister)(void); /* Unregister function. */
mapi_clist_av1 *mapi_command_list; /* List of commands to add. */
mapi_cap_list_av2 *mapi_cap_list; /* List of CAPs to add */
const char *mapi_module_version; /* Module's version (freeform), replaced with ircd version if NULL */
const char *mapi_module_description; /* Module's description (freeform) */
+ unsigned long int mapi_datecode; /* Unix timestamp of module's build */
};
#define DECLARE_MODULE_AV1(name, reg, unreg, cl, hl, hfnlist, v) \
struct mapi_mheader_av1 _mheader = { MAPI_V1, reg, unreg, cl, hl, hfnlist, v}
-#define DECLARE_MODULE_AV2(name, origin, reg, unreg, cl, hl, hfnlist, caplist, v, desc) \
- struct mapi_mheader_av2 _mheader = { MAPI_V2, origin, reg, unreg, cl, hl, hfnlist, caplist, v, desc}
+#define DECLARE_MODULE_AV2(name, reg, unreg, cl, hl, hfnlist, caplist, v, desc) \
+ struct mapi_mheader_av2 _mheader = { MAPI_V2, reg, unreg, cl, hl, hfnlist, caplist, v, desc, DATECODE}
/* add a path */
void mod_add_path(const char *path);
extern void load_module(char *path);
/* load all modules */
-extern void load_all_modules(int warn);
+extern void load_all_modules(bool warn);
/* load core modules */
-extern void load_core_modules(int);
+extern void load_core_modules(bool);
-extern int unload_one_module(const char *, int);
-extern int load_one_module(const char *, int);
-extern int load_a_module(const char *, int, int);
-extern int findmodule_byname(const char *);
-extern void modules_init(void);
+extern bool unload_one_module(const char *, bool);
+extern bool load_one_module(const char *, int, bool);
+extern bool load_a_module(const char *, bool, int, bool);
+extern struct module *findmodule_byname(const char *);
+extern void init_modules(void);
+
+extern rb_dlink_list module_list;
+extern rb_dlink_list mod_paths;
#endif /* INCLUDED_modules_h */