Skip to content
Extraits de code Groupes Projets

Modules

Fusionnées Kubat a demandé de fusionner dev-kubat vers master
4 fichiers
+ 44
25
Comparer les modifications
  • Côte à côte
  • En ligne
Fichiers
4
+ 18
9
@@ -6,16 +6,21 @@ struct lkt_state;
with a name that can be generated or red from a config file. */
struct module_reg {
const char *name;
void (*func)(void);
union {
void (*func)(void);
void *obj;
};
};
#define REG_BEGIN(reg) struct module_reg reg[] = {
#define REG_ADD(__f) { .name = #__f, .func = (void(*)(void)) __f },
#define REG_ADD_NAMED(__n, __f) { .name = __n, .func = (void(*)(void)) __f },
#define REG_END() { .name = NULL, .func = NULL } };
#define REG_EXPORT_NAME "__reg__"
#define REG_BEGIN(reg) struct module_reg reg[] = {
#define REG_ADD(f) { .name = #f, .func = (void(*)(void)) f },
#define REG_ADD_NAMED(n, f) { .name = n, .func = (void(*)(void)) f },
#define REG_END() { .name = NULL, .func = NULL } };
/* Use only once per .so files or you will have some problems... */
#if ! defined(_STATIC_MODULES)
#define REG_EXPORT(__reg) struct module_reg *__reg__ = __reg;
#define REG_EXPORT(__reg) struct module_reg *__reg__ = __reg;
#else
#define REG_EXPORT(__reg)
#endif
@@ -29,10 +34,14 @@ void *reg_pick(const char *file, void **handle, const char *symbol);
shared library with REG_EXPORT. Note that this reg is named `__reg__`,
thus no symbol must be named `__reg__` in the .so file.
Returns 0 on success, something else on error. */
int reg_from_file(const char *file, struct module_reg *ret);
int reg_from_file(const char *file, struct module_reg **ret, void **handle);
/* Set the ref for this .a / .so file */
void reg_set(struct module_reg *);
/* Set the __reg__ pointer. */
void reg_export(struct module_reg *reg);
/* Get the object named with 'name' from the reg. Returns NULL on error
or 'not found'. */
void *__reg_get(struct module_reg *reg, const char *name);
/* Load a module by its name. Also initialize the mod pointer. No check on data
type is done, it is up to the user to check if the structure passed as a
Chargement en cours