refactor(module): separate init and shutdown function pointer types

* Define stk_init_mod_func as int (*)(void) and stk_shutdown_mod_func as void (*)(void).
* Update stk_inits and stk_shutdowns arrays to use the new specific function pointer types.
* Update the symbol lookup union in stk_module_load to support distinct init and shutdown signatures.
* Adjust memory allocation and reallocation logic in stk_module_init_memory and stk_module_realloc_memory to match new type sizes.
This commit is contained in:
2026-01-29 22:29:59 +01:00
parent baa75e897f
commit 450f13fa62
+16 -13
View File
@@ -15,12 +15,13 @@ void *platform_load_library(const char *path);
void platform_unload_library(void *handle); void platform_unload_library(void *handle);
void *platform_get_symbol(void *handle, const char *symbol); void *platform_get_symbol(void *handle, const char *symbol);
typedef void (*stk_module_func)(void); typedef int (*stk_init_mod_func)(void);
typedef void (*stk_shutdown_mod_func)(void);
char (*stk_module_ids)[STK_MOD_ID_BUFFER] = NULL; char (*stk_module_ids)[STK_MOD_ID_BUFFER] = NULL;
void **stk_handles = NULL; void **stk_handles = NULL;
stk_module_func *stk_inits = NULL; stk_init_mod_func *stk_inits = NULL;
stk_module_func *stk_shutdowns = NULL; stk_shutdown_mod_func *stk_shutdowns = NULL;
extern uint8_t stk_initialized; extern uint8_t stk_initialized;
@@ -79,11 +80,13 @@ int is_mod_loaded(const char *module_name)
int stk_module_load(const char *path, int index) int stk_module_load(const char *path, int index)
{ {
void *handle; void *handle;
stk_module_func init_func, shutdown_func; stk_init_mod_func init_func;
stk_shutdown_mod_func shutdown_func;
char module_id[STK_MOD_ID_BUFFER]; char module_id[STK_MOD_ID_BUFFER];
union { union {
void *obj; void *obj;
stk_module_func func; stk_init_mod_func init_func;
stk_shutdown_mod_func shutdown_func;
} u; } u;
handle = platform_load_library(path); handle = platform_load_library(path);
@@ -91,10 +94,10 @@ int stk_module_load(const char *path, int index)
return -1; return -1;
u.obj = platform_get_symbol(handle, stk_mod_init_name); u.obj = platform_get_symbol(handle, stk_mod_init_name);
init_func = u.func; init_func = u.init_func;
u.obj = platform_get_symbol(handle, stk_mod_shutdown_name); u.obj = platform_get_symbol(handle, stk_mod_shutdown_name);
shutdown_func = u.func; shutdown_func = u.shutdown_func;
if (!init_func || !shutdown_func) { if (!init_func || !shutdown_func) {
platform_unload_library(handle); platform_unload_library(handle);
@@ -156,8 +159,8 @@ int stk_module_init_memory(size_t capacity)
{ {
stk_module_ids = malloc(capacity * sizeof(*stk_module_ids)); stk_module_ids = malloc(capacity * sizeof(*stk_module_ids));
stk_handles = malloc(capacity * sizeof(void *)); stk_handles = malloc(capacity * sizeof(void *));
stk_inits = malloc(capacity * sizeof(stk_module_func)); stk_inits = malloc(capacity * sizeof(stk_init_mod_func));
stk_shutdowns = malloc(capacity * sizeof(stk_module_func)); stk_shutdowns = malloc(capacity * sizeof(stk_shutdown_mod_func));
if (!stk_module_ids || !stk_handles || !stk_inits || !stk_shutdowns) { if (!stk_module_ids || !stk_handles || !stk_inits || !stk_shutdowns) {
stk_module_free_memory(); stk_module_free_memory();
@@ -171,13 +174,13 @@ int stk_module_realloc_memory(size_t new_capacity)
{ {
char (*new_module_ids)[STK_MOD_ID_BUFFER]; char (*new_module_ids)[STK_MOD_ID_BUFFER];
void **new_handles; void **new_handles;
stk_module_func *new_inits; stk_init_mod_func *new_inits;
stk_module_func *new_shutdowns; stk_shutdown_mod_func *new_shutdowns;
char (*old_module_ids)[STK_MOD_ID_BUFFER] = stk_module_ids; char (*old_module_ids)[STK_MOD_ID_BUFFER] = stk_module_ids;
void **old_handles = stk_handles; void **old_handles = stk_handles;
stk_module_func *old_inits = stk_inits; stk_init_mod_func *old_inits = stk_inits;
stk_module_func *old_shutdowns = stk_shutdowns; stk_shutdown_mod_func *old_shutdowns = stk_shutdowns;
if (new_capacity == 0) { if (new_capacity == 0) {
stk_module_free_memory(); stk_module_free_memory();