refactor(stk.h, module.c, stk.c): switch deps to exported array and clean up types

- Move stk_dep_t to public header
- Rename stk_set_module_dependencies_fn to stk_set_module_deps_sym
- Change default deps symbol name from stk_mod_dependencies to stk_mod_deps
- Read deps as direct exported stk_dep_t array instead of function call
- Update sentinel check to .id[0] != '\0'
- Default module version to 0.0.0 if not provided or invalid
- Remove deps_func from union in stk_module_load
This commit is contained in:
2026-03-03 22:53:37 +01:00
parent ceb389de0d
commit 9a4b5ee9ef
3 changed files with 27 additions and 26 deletions
+6 -1
View File
@@ -71,6 +71,11 @@ typedef enum {
STK_MOD_RELOAD STK_MOD_RELOAD
} stk_module_event_t; } stk_module_event_t;
typedef struct {
char id[STK_MOD_ID_BUFFER];
char version[STK_MOD_VERSION_BUFFER];
} stk_dep_t;
unsigned char stk_init(void); unsigned char stk_init(void);
void stk_shutdown(void); void stk_shutdown(void);
size_t stk_module_count(void); size_t stk_module_count(void);
@@ -83,7 +88,7 @@ void stk_set_logging_enabled(unsigned char enabled);
void stk_set_module_name_fn(const char *name); void stk_set_module_name_fn(const char *name);
void stk_set_module_version_fn(const char *name); void stk_set_module_version_fn(const char *name);
void stk_set_module_description_fn(const char *name); void stk_set_module_description_fn(const char *name);
void stk_set_module_dependencies_fn(const char *name); void stk_set_module_deps_sym(const char *name);
unsigned char stk_is_logging_enabled(void); unsigned char stk_is_logging_enabled(void);
#ifdef __cplusplus #ifdef __cplusplus
+21 -20
View File
@@ -15,11 +15,6 @@ typedef struct {
char op; char op;
} stk_version_t; } stk_version_t;
typedef struct {
char id[STK_MOD_ID_BUFFER];
char version[STK_MOD_VERSION_BUFFER];
} stk_dep_t;
typedef struct { typedef struct {
void *handle; void *handle;
stk_init_mod_func init; stk_init_mod_func init;
@@ -47,8 +42,7 @@ static char stk_mod_name_fn[STK_MOD_FUNC_NAME_BUFFER] = "stk_mod_name";
static char stk_mod_version_fn[STK_MOD_FUNC_NAME_BUFFER] = "stk_mod_version"; static char stk_mod_version_fn[STK_MOD_FUNC_NAME_BUFFER] = "stk_mod_version";
static char stk_mod_description_fn[STK_MOD_FUNC_NAME_BUFFER] = static char stk_mod_description_fn[STK_MOD_FUNC_NAME_BUFFER] =
"stk_mod_description"; "stk_mod_description";
static char stk_mod_dependencies_fn[STK_MOD_FUNC_NAME_BUFFER] = static char stk_mod_deps_sym[STK_MOD_FUNC_NAME_BUFFER] = "stk_mod_deps";
"stk_mod_dependencies";
size_t module_count = 0; size_t module_count = 0;
@@ -257,10 +251,9 @@ unsigned char stk_module_load(const char *path, int index)
stk_init_mod_func init_func; stk_init_mod_func init_func;
stk_shutdown_mod_func shutdown_func; stk_shutdown_mod_func shutdown_func;
const char *(*meta_func)(void); const char *(*meta_func)(void);
const char *(*(*deps_func)(void))[2];
} u; } u;
const char *meta_str; const char *meta_str;
const char *(*deps)[2]; const stk_dep_t *deps;
size_t dep_count; size_t dep_count;
stk_dep_t *dep_arr; stk_dep_t *dep_arr;
@@ -313,12 +306,22 @@ unsigned char stk_module_load(const char *path, int index)
if (u.obj) { if (u.obj) {
meta_str = u.meta_func(); meta_str = u.meta_func();
if (meta_str) { if (meta_str) {
strncpy(stk_modules[index].version, meta_str, stk_version_t v = stk_parse_version(meta_str);
STK_MOD_VERSION_BUFFER - 1); if (v.major == 0 && v.minor == 0 && v.patch == 0 &&
meta_str[0] != '0') {
strncpy(stk_modules[index].version, "0.0.0",
STK_MOD_VERSION_BUFFER - 1);
} else {
strncpy(stk_modules[index].version, meta_str,
STK_MOD_VERSION_BUFFER - 1);
}
stk_modules[index].version[STK_MOD_VERSION_BUFFER - 1] = stk_modules[index].version[STK_MOD_VERSION_BUFFER - 1] =
'\0'; '\0';
} }
} }
if (!stk_modules[index].version[0])
strncpy(stk_modules[index].version, "0.0.0",
STK_MOD_VERSION_BUFFER - 1);
stk_modules[index].desc[0] = '\0'; stk_modules[index].desc[0] = '\0';
u.obj = platform_get_symbol(handle, stk_mod_description_fn); u.obj = platform_get_symbol(handle, stk_mod_description_fn);
@@ -333,16 +336,14 @@ unsigned char stk_module_load(const char *path, int index)
stk_modules[index].deps = NULL; stk_modules[index].deps = NULL;
stk_modules[index].dep_count = 0; stk_modules[index].dep_count = 0;
u.obj = platform_get_symbol(handle, stk_mod_dependencies_fn); u.obj = platform_get_symbol(handle, stk_mod_deps_sym);
if (!u.obj) if (!u.obj)
goto skip_deps; goto skip_deps;
deps = u.deps_func(); deps = (const stk_dep_t *)u.obj;
if (!deps)
goto skip_deps;
dep_count = 0; dep_count = 0;
while (deps[dep_count][0] != NULL) while (deps[dep_count].id[0] != '\0')
dep_count++; dep_count++;
if (dep_count == 0) if (dep_count == 0)
@@ -355,10 +356,10 @@ unsigned char stk_module_load(const char *path, int index)
{ {
size_t d; size_t d;
for (d = 0; d < dep_count; d++) { for (d = 0; d < dep_count; d++) {
strncpy(dep_arr[d].id, deps[d][0], strncpy(dep_arr[d].id, deps[d].id,
STK_MOD_ID_BUFFER - 1); STK_MOD_ID_BUFFER - 1);
dep_arr[d].id[STK_MOD_ID_BUFFER - 1] = '\0'; dep_arr[d].id[STK_MOD_ID_BUFFER - 1] = '\0';
strncpy(dep_arr[d].version, deps[d][1], strncpy(dep_arr[d].version, deps[d].version,
STK_MOD_VERSION_BUFFER - 1); STK_MOD_VERSION_BUFFER - 1);
dep_arr[d].version[STK_MOD_VERSION_BUFFER - 1] = '\0'; dep_arr[d].version[STK_MOD_VERSION_BUFFER - 1] = '\0';
} }
@@ -506,7 +507,7 @@ void stk_set_module_description_fn(const char *name)
stk_set_fn_name(stk_mod_description_fn, name); stk_set_fn_name(stk_mod_description_fn, name);
} }
void stk_set_module_dependencies_fn(const char *name) void stk_set_module_deps_sym(const char *name)
{ {
stk_set_fn_name(stk_mod_dependencies_fn, name); stk_set_fn_name(stk_mod_deps_sym, name);
} }
-5
View File
@@ -8,11 +8,6 @@
typedef int (*stk_init_mod_func)(void); typedef int (*stk_init_mod_func)(void);
typedef void (*stk_shutdown_mod_func)(void); typedef void (*stk_shutdown_mod_func)(void);
typedef struct {
char id[STK_MOD_ID_BUFFER];
char version[STK_MOD_VERSION_BUFFER];
} stk_dep_t;
typedef struct { typedef struct {
void *handle; void *handle;
stk_init_mod_func init; stk_init_mod_func init;