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
This commit is contained in:
2026-01-18 22:01:54 +01:00
parent a290be5dcc
commit a3978644af
3 changed files with 97 additions and 66 deletions
+74
View File
@@ -1,4 +1,5 @@
#include "stk.h"
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
@@ -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;