From 26fb19a7f5b29ae4a2ece90d9e61f830a357cc34 Mon Sep 17 00:00:00 2001 From: anth64 Date: Sat, 14 Feb 2026 12:39:13 +0100 Subject: [PATCH] feat(core): add flags bitfield system - Replace stk_initialized with stk_flags bitfield - Add STK_FLAG_INITIALIZED (0x01) and STK_FLAG_LOGGING_ENABLED (0x02) - Add stk_set_logging_enabled() and stk_is_logging_enabled() API - Single byte for all boolean state and settings Logging enabled by default, packs all flags into one byte for efficiency. --- include/stk.h | 6 ++++++ src/module.c | 6 +++--- src/stk.c | 23 ++++++++++++++++++----- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/include/stk.h b/include/stk.h index 6084992..69f8b05 100644 --- a/include/stk.h +++ b/include/stk.h @@ -30,6 +30,10 @@ #define STK_PLATFORM_REMOVE_DIR_ERROR 3 #define STK_PLATFORM_REMOVE_FILE_ERROR 4 +/* Settings flags */ +#define STK_FLAG_INITIALIZED 0x01 +#define STK_FLAG_LOGGING_ENABLED 0x02 + #if defined(__linux__) || defined(_WIN32) #define STK_EVENT_BUFFER 4096 #endif @@ -62,6 +66,8 @@ void stk_set_mod_dir(const char *path); void stk_set_tmp_dir_name(const char *name); void stk_set_module_init_fn(const char *name); void stk_set_module_shutdown_fn(const char *name); +void stk_set_logging_enabled(unsigned char enabled); +unsigned char stk_is_logging_enabled(void); #ifdef __cplusplus } diff --git a/src/module.c b/src/module.c index b96c05b..c238c82 100644 --- a/src/module.c +++ b/src/module.c @@ -17,7 +17,7 @@ void **stk_handles = NULL; stk_init_mod_func *stk_inits = NULL; stk_shutdown_mod_func *stk_shutdowns = NULL; -extern unsigned char stk_initialized; +extern unsigned char stk_flags; 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] = @@ -253,7 +253,7 @@ void stk_module_unload_all(void) void stk_set_module_init_fn(const char *name) { - if (!name || stk_initialized) + if (!name || (stk_flags & STK_FLAG_INITIALIZED)) return; strncpy(stk_mod_init_name, name, STK_MOD_FUNC_NAME_BUFFER - 1); @@ -262,7 +262,7 @@ void stk_set_module_init_fn(const char *name) void stk_set_module_shutdown_fn(const char *name) { - if (!name || stk_initialized) + if (!name || (stk_flags & STK_FLAG_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 35c3e4a..d4f32ff 100644 --- a/src/stk.c +++ b/src/stk.c @@ -15,7 +15,7 @@ extern char (*stk_module_ids)[STK_MOD_ID_BUFFER]; extern size_t module_count; -unsigned char stk_initialized = 0; +unsigned char stk_flags = STK_FLAG_LOGGING_ENABLED; static char stk_mod_dir[STK_PATH_MAX_OS] = "mods"; static char stk_tmp_name[STK_MOD_ID_BUFFER] = ".tmp"; @@ -143,7 +143,7 @@ scanned: STK_VERSION_STRING, module_count, module_count != 1 ? "s" : "", stk_mod_dir); - stk_initialized = 1; + stk_flags |= STK_FLAG_INITIALIZED; return STK_INIT_SUCCESS; } @@ -162,7 +162,7 @@ void stk_shutdown(void) stk_tmp_dir); } - stk_initialized = 0; + stk_flags &= ~STK_FLAG_INITIALIZED; stk_log(stdout, "stk shutdown"); } @@ -380,7 +380,7 @@ finish_poll: void stk_set_mod_dir(const char *path) { - if (!path || stk_initialized) + if (!path || (stk_flags & STK_FLAG_INITIALIZED)) return; strncpy(stk_mod_dir, path, STK_PATH_MAX_OS - 1); @@ -398,7 +398,7 @@ void stk_set_mod_dir(const char *path) void stk_set_tmp_dir_name(const char *name) { - if (!name || stk_initialized) + if (!name || (stk_flags & STK_FLAG_INITIALIZED)) return; strncpy(stk_tmp_name, name, STK_MOD_ID_BUFFER - 1); @@ -411,3 +411,16 @@ void stk_set_tmp_dir_name(const char *name) strncat(stk_tmp_dir, stk_tmp_name, STK_PATH_MAX_OS - strlen(stk_tmp_dir) - 1); } + +void stk_set_logging_enabled(unsigned char enabled) +{ + if (enabled) + stk_flags |= STK_FLAG_LOGGING_ENABLED; + else + stk_flags &= ~STK_FLAG_LOGGING_ENABLED; +} + +unsigned char stk_is_logging_enabled(void) +{ + return (stk_flags & STK_FLAG_LOGGING_ENABLED) != 0; +}