From c558032ea0b151b0b66294c7d284f2c871092dcd Mon Sep 17 00:00:00 2001 From: anth64 Date: Sun, 25 Jan 2026 17:02:44 +0100 Subject: [PATCH] feat: prevent configuration changes after initialization * Introduced stk_initialized flag. * Updated all configuration setters (stk_set_mod_dir, stk_set_tmp_dir_name, stk_set_module_init_fn, and stk_set_module_shutdown_fn) to silently return if the library is already initialized. * Ensures internal state consistency by locking paths and function entry points once stk_init has been called. --- src/module.c | 6 ++++-- src/stk.c | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/module.c b/src/module.c index 74db5fe..c235470 100644 --- a/src/module.c +++ b/src/module.c @@ -16,6 +16,8 @@ void **stk_handles = NULL; stk_module_func *stk_inits = NULL; stk_module_func *stk_shutdowns = NULL; +extern uint8_t stk_initialized; + static char stk_mod_init_name[STK_MOD_FUNC_NAME_BUFFER] = "stk_mod_init"; static char stk_mod_shutdown_name[STK_MOD_FUNC_NAME_BUFFER] = "stk_mod_shutdown"; @@ -209,7 +211,7 @@ void stk_module_unload_all(void) void stk_set_module_init_fn(const char *name) { - if (!name) + if (!name || stk_initialized) return; strncpy(stk_mod_init_name, name, STK_MOD_FUNC_NAME_BUFFER - 1); @@ -218,7 +220,7 @@ void stk_set_module_init_fn(const char *name) void stk_set_module_shutdown_fn(const char *name) { - if (!name) + if (!name || stk_initialized) return; strncpy(stk_mod_shutdown_name, name, STK_MOD_FUNC_NAME_BUFFER - 1); diff --git a/src/stk.c b/src/stk.c index f21009c..4a7b281 100644 --- a/src/stk.c +++ b/src/stk.c @@ -1,5 +1,6 @@ #include "stk.h" #include "stk_log.h" +#include #include #include #include @@ -13,6 +14,8 @@ extern char (*stk_module_ids)[STK_MOD_ID_BUFFER]; extern size_t module_count; +uint8_t stk_initialized = 0; + static char stk_mod_dir[STK_PATH_MAX_OS] = "mods"; static char stk_tmp_name[STK_MOD_ID_BUFFER] = ".tmp"; static char stk_tmp_dir[STK_PATH_MAX_OS] = "mods/.tmp"; @@ -67,6 +70,8 @@ scanned: stk_log(stdout, "[stk] stk v%s initialized! Loaded %lu mod%s from %s/", STK_VERSION_STRING, module_count, module_count != 1 ? "s" : "", stk_mod_dir); + + stk_initialized = 1; return 0; } @@ -79,6 +84,7 @@ void stk_shutdown(void) stk_module_unload_all(); platform_remove_dir(stk_tmp_dir); + stk_initialized = 0; stk_log(stdout, "[stk] stk shutdown"); } @@ -119,7 +125,7 @@ size_t stk_poll(void) void stk_set_mod_dir(const char *path) { - if (!path) + if (!path || stk_initialized) return; strncpy(stk_mod_dir, path, STK_PATH_MAX_OS - 1); @@ -136,7 +142,7 @@ void stk_set_mod_dir(const char *path) void stk_set_tmp_dir_name(const char *name) { - if (!name) + if (!name || stk_initialized) return; strncpy(stk_tmp_name, name, STK_MOD_ID_BUFFER - 1);