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.
This commit is contained in:
+4
-2
@@ -16,6 +16,8 @@ void **stk_handles = NULL;
|
|||||||
stk_module_func *stk_inits = NULL;
|
stk_module_func *stk_inits = NULL;
|
||||||
stk_module_func *stk_shutdowns = 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_init_name[STK_MOD_FUNC_NAME_BUFFER] = "stk_mod_init";
|
||||||
static char stk_mod_shutdown_name[STK_MOD_FUNC_NAME_BUFFER] =
|
static char stk_mod_shutdown_name[STK_MOD_FUNC_NAME_BUFFER] =
|
||||||
"stk_mod_shutdown";
|
"stk_mod_shutdown";
|
||||||
@@ -209,7 +211,7 @@ void stk_module_unload_all(void)
|
|||||||
|
|
||||||
void stk_set_module_init_fn(const char *name)
|
void stk_set_module_init_fn(const char *name)
|
||||||
{
|
{
|
||||||
if (!name)
|
if (!name || stk_initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
strncpy(stk_mod_init_name, name, STK_MOD_FUNC_NAME_BUFFER - 1);
|
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)
|
void stk_set_module_shutdown_fn(const char *name)
|
||||||
{
|
{
|
||||||
if (!name)
|
if (!name || stk_initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
strncpy(stk_mod_shutdown_name, name, STK_MOD_FUNC_NAME_BUFFER - 1);
|
strncpy(stk_mod_shutdown_name, name, STK_MOD_FUNC_NAME_BUFFER - 1);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "stk.h"
|
#include "stk.h"
|
||||||
#include "stk_log.h"
|
#include "stk_log.h"
|
||||||
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -13,6 +14,8 @@ extern char (*stk_module_ids)[STK_MOD_ID_BUFFER];
|
|||||||
|
|
||||||
extern size_t module_count;
|
extern size_t module_count;
|
||||||
|
|
||||||
|
uint8_t stk_initialized = 0;
|
||||||
|
|
||||||
static char stk_mod_dir[STK_PATH_MAX_OS] = "mods";
|
static char stk_mod_dir[STK_PATH_MAX_OS] = "mods";
|
||||||
static char stk_tmp_name[STK_MOD_ID_BUFFER] = ".tmp";
|
static char stk_tmp_name[STK_MOD_ID_BUFFER] = ".tmp";
|
||||||
static char stk_tmp_dir[STK_PATH_MAX_OS] = "mods/.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_log(stdout, "[stk] stk v%s initialized! Loaded %lu mod%s from %s/",
|
||||||
STK_VERSION_STRING, module_count, module_count != 1 ? "s" : "",
|
STK_VERSION_STRING, module_count, module_count != 1 ? "s" : "",
|
||||||
stk_mod_dir);
|
stk_mod_dir);
|
||||||
|
|
||||||
|
stk_initialized = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,6 +84,7 @@ void stk_shutdown(void)
|
|||||||
|
|
||||||
stk_module_unload_all();
|
stk_module_unload_all();
|
||||||
platform_remove_dir(stk_tmp_dir);
|
platform_remove_dir(stk_tmp_dir);
|
||||||
|
stk_initialized = 0;
|
||||||
stk_log(stdout, "[stk] stk shutdown");
|
stk_log(stdout, "[stk] stk shutdown");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +125,7 @@ size_t stk_poll(void)
|
|||||||
|
|
||||||
void stk_set_mod_dir(const char *path)
|
void stk_set_mod_dir(const char *path)
|
||||||
{
|
{
|
||||||
if (!path)
|
if (!path || stk_initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
strncpy(stk_mod_dir, path, STK_PATH_MAX_OS - 1);
|
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)
|
void stk_set_tmp_dir_name(const char *name)
|
||||||
{
|
{
|
||||||
if (!name)
|
if (!name || stk_initialized)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
strncpy(stk_tmp_name, name, STK_MOD_ID_BUFFER - 1);
|
strncpy(stk_tmp_name, name, STK_MOD_ID_BUFFER - 1);
|
||||||
|
|||||||
Reference in New Issue
Block a user