From b024097205073a3bb1d9fe5ce6fb69dff1a5204a Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Wed, 27 May 2020 09:45:59 +0200 Subject: [PATCH] Correct segfault --- inc/lektor/reg.h | 4 ++-- src/reg.c | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/inc/lektor/reg.h b/inc/lektor/reg.h index e0428f91..8d4e1e20 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 91b44a10..8d421eea 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; } -- GitLab