diff --git a/inc/lektor/reg.h b/inc/lektor/reg.h index e0428f910835f98c7a6c7f245d36a30c26936df2..8d4e1e204d76077f01b1e1e8a2f737110e11c492 100644 --- a/inc/lektor/reg.h +++ b/inc/lektor/reg.h @@ -14,7 +14,7 @@ struct module_reg { const char *name; union { reg_func func; - struct module_reg *obj; + struct module_reg **obj; /* First item of the array */ }; }; @@ -29,7 +29,7 @@ struct lkt_module { #define REG_BEGIN(reg) struct module_reg reg[] = { #define REG_ADD(f) { .name = #f, .func = f }, #define REG_ADD_NAMED(n, f) { .name = n, .func = f }, -#define REG_REGISTER(n, s) { .name = n, .obj = s }, +#define REG_REGISTER(n, s) { .name = n, .obj = &s }, #define REG_END() { .name = NULL, .func = NULL } }; #define REG_DEFINE(reg) struct module_reg reg* = NULL; diff --git a/src/reg.c b/src/reg.c index 91b44a10b8f7b4f1ea2a385175f98869c7addba5..8d421eeaa2532dbb4c05f9d96481af425b0ab0da 100644 --- a/src/reg.c +++ b/src/reg.c @@ -24,9 +24,9 @@ void * __reg_get(struct module_reg *reg, const char *name) { int i; - for (i = 0; reg[i].name && reg[i].obj; ++i) { - if (STR_MATCH(reg[i].name, name)) - return reg[i].obj; + for (i = 0; (reg + i)->name && (reg + i)->obj; ++i) { + if (STR_MATCH((reg + i)->name, name)) + return (reg + i)->obj; } return NULL; } @@ -35,9 +35,9 @@ reg_func __reg_func(struct module_reg *reg, const char *name) { int i; - for (i = 0; reg[i].name && reg[i].func; ++i) { - if (STR_MATCH(reg[i].name, name)) - return reg[i].func; + for (i = 0; (reg + i)->name && (reg + i)->func; ++i) { + if (STR_MATCH((reg + i)->name, name)) + return (reg + i)->func; } return NULL; }