From a3978644af26c41a93366dca87eb6e76cf31de64 Mon Sep 17 00:00:00 2001 From: anth64 Date: Sun, 18 Jan 2026 22:01:54 +0100 Subject: [PATCH] refactor: centralize module identity logic and upgrade lookup - Move extract_module_id and is_valid_module_file to module.c - Update is_module_loaded to return module index instead of uint8_t - Fix platform.c event checks to handle index-based return (>= 0) - Centralize STK_MODULE_EXT definitions in stk.h --- include/stk.h | 14 ++++++++++ src/module.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ src/platform.c | 75 ++++++-------------------------------------------- 3 files changed, 97 insertions(+), 66 deletions(-) diff --git a/include/stk.h b/include/stk.h index 90af927..701b95f 100644 --- a/include/stk.h +++ b/include/stk.h @@ -9,6 +9,20 @@ #define STK_PATH_MAX 256 #define STK_PATH_MAX_OS 4096 +#if defined(__linux__) || defined(_WIN32) +#define STK_EVENT_BUFFER 4096 +#endif + +#if defined(_WIN32) +#define STK_MODULE_EXT ".dll" +#elif defined(__APPLE__) +#define STK_MODULE_EXT ".dylib" +#else +#define STK_MODULE_EXT ".so" +#endif + +#define STK_MODULE_EXT_LEN (sizeof(STK_MODULE_EXT) - 1) + #ifdef __cplusplus extern "C" { #endif diff --git a/src/module.c b/src/module.c index b0b59ab..b538d5e 100644 --- a/src/module.c +++ b/src/module.c @@ -1,4 +1,5 @@ #include "stk.h" +#include #include #include @@ -17,6 +18,79 @@ size_t module_count = 0; size_t stk_module_count(void) { return module_count; } +void extract_module_id(const char *path, char *out_id) +{ + const char *basename; + char *dot; + + basename = strrchr(path, '/'); +#ifdef _WIN32 + if (!basename) + basename = strrchr(path, '\\'); +#endif + if (!basename) + basename = path; + else + basename++; + + strncpy(out_id, basename, STK_MOD_ID_BUFFER - 1); + out_id[STK_MOD_ID_BUFFER - 1] = '\0'; + + dot = strrchr(out_id, '.'); + if (dot) + *dot = '\0'; +} + +uint8_t is_valid_module_file(const char *filename) +{ + const char *ext; + size_t name_len; + + if (!filename) + return 0; + + name_len = strlen(filename); + + if (name_len <= STK_MODULE_EXT_LEN) + return 0; + + ext = filename + (name_len - STK_MODULE_EXT_LEN); + return strcmp(ext, STK_MODULE_EXT) == 0; +} + +int is_module_loaded(const char *filename, + char (*loaded_module_ids)[STK_MOD_ID_BUFFER], + size_t loaded_count) +{ + char module_id[STK_MOD_ID_BUFFER]; + const char *basename; + char *dot; + size_t i; + + basename = strrchr(filename, '/'); +#ifdef _WIN32 + if (!basename) + basename = strrchr(filename, '\\'); +#endif + if (!basename) + basename = filename; + else + basename++; + + strncpy(module_id, basename, STK_MOD_ID_BUFFER - 1); + module_id[STK_MOD_ID_BUFFER - 1] = '\0'; + + dot = strrchr(module_id, '.'); + if (dot) + *dot = '\0'; + + for (i = 0; i < loaded_count; i++) + if (strcmp(loaded_module_ids[i], module_id) == 0) + return i; + + return -1; +} + int stk_module_load(const char *path, int index) { void *handle; diff --git a/src/platform.c b/src/platform.c index b6d80e8..5943cc8 100644 --- a/src/platform.c +++ b/src/platform.c @@ -1,4 +1,5 @@ #include "stk.h" +#include #include #include #include @@ -22,69 +23,10 @@ #include #endif -#if defined(__linux__) || defined(_WIN32) -#define STK_EVENT_BUFFER 4096 -#endif - -#if defined(_WIN32) -#define STK_MODULE_EXT ".dll" -#elif defined(__APPLE__) -#define STK_MODULE_EXT ".dylib" -#else -#define STK_MODULE_EXT ".so" -#endif - -#define STK_MODULE_EXT_LEN (sizeof(STK_MODULE_EXT) - 1) - -static uint8_t is_valid_module_file(const char *filename) -{ - const char *ext; - size_t name_len; - - if (!filename) - return 0; - - name_len = strlen(filename); - - if (name_len <= STK_MODULE_EXT_LEN) - return 0; - - ext = filename + (name_len - STK_MODULE_EXT_LEN); - return strcmp(ext, STK_MODULE_EXT) == 0; -} - -static uint8_t is_module_loaded(const char *filename, - char (*loaded_module_ids)[STK_MOD_ID_BUFFER], - size_t loaded_count) -{ - char module_id[STK_MOD_ID_BUFFER]; - const char *basename; - char *dot; - size_t i; - - basename = strrchr(filename, '/'); -#ifdef _WIN32 - if (!basename) - basename = strrchr(filename, '\\'); -#endif - if (!basename) - basename = filename; - else - basename++; - - strncpy(module_id, basename, STK_MOD_ID_BUFFER - 1); - module_id[STK_MOD_ID_BUFFER - 1] = '\0'; - - dot = strrchr(module_id, '.'); - if (dot) - *dot = '\0'; - - for (i = 0; i < loaded_count; i++) - if (strcmp(loaded_module_ids[i], module_id) == 0) - return 1; - - return 0; -} +uint8_t is_module_loaded(const char *filename, + char (*loaded_module_ids)[STK_MOD_ID_BUFFER], + size_t loaded_count); +uint8_t is_valid_module_file(const char *filename); int platform_mkdir(const char *path) { @@ -535,7 +477,7 @@ stk_module_event_t *platform_directory_watch_check( (event->mask & (IN_CLOSE_WRITE | IN_MOVED_TO)) ? (is_module_loaded(event->name, loaded_module_ids, - loaded_count) + loaded_count) >= 0 ? STK_MOD_RELOAD : STK_MOD_LOAD) : STK_MOD_UNLOAD; @@ -611,7 +553,7 @@ stk_module_event_t *platform_directory_watch_check( FILE_ACTION_RENAMED_OLD_NAME) ? (is_module_loaded((*file_list)[index], loaded_module_ids, - loaded_count) + loaded_count) >= 0 ? STK_MOD_RELOAD : STK_MOD_LOAD) : STK_MOD_UNLOAD; @@ -683,7 +625,8 @@ stk_module_event_t *platform_directory_watch_check( if (!old_snap || old_snap->mtime != new_snapshots[i].mtime) { events[index] = is_module_loaded(new_snapshots[i].filename, - loaded_module_ids, loaded_count) + loaded_module_ids, + loaded_count) >= 0 ? STK_MOD_RELOAD : STK_MOD_LOAD; strncpy((*file_list)[index], new_snapshots[i].filename,