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.
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
+3
-3
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user