Remove unnecessarily stored data

This commit is contained in:
2025-05-04 02:02:45 +03:00
parent 487da24e65
commit e86dd4781c
12 changed files with 232 additions and 193 deletions

View File

@@ -264,7 +264,7 @@ static HiResult moduler_apply_module_patch(VectorSymbol *psymbols,
return HI_OK;
}
PatchData moduler_create_patch(ModuleData *module) {
static PatchData moduler_create_patch(ModuleData *module) {
time_t now = time(NULL);
struct tm *t = localtime(&now);
@@ -281,7 +281,7 @@ PatchData moduler_create_patch(ModuleData *module) {
char filename[512];
size_t written =
hi_str_concat_buf(sizeof(filename), filename, module->name, file_append);
string_concat_buf(sizeof(filename), filename, module->name, file_append);
if (written == 0) {
log_error("Failed to concat %s and %s\n", module->name, ".patch");
@@ -294,14 +294,13 @@ PatchData moduler_create_patch(ModuleData *module) {
return data;
}
HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
VectorMemoryMap *memmaps) {
HiResult moduler_reload(VectorModuleData *modules, ModuleData *module) {
// Return OK because this isn't an error case. We just don't do it yet
// because we only handle reloading a complete solib. Can't do that with
// executables.
if (hi_modinfo_has(module->info, HI_MODULE_STATE_EXEC)) {
module->info = hi_modinfo_clear(module->info, HI_MODULE_STATE_DIRTY);
if (modinfo_has(module->info, HI_MODULE_STATE_EXEC)) {
module->info = modinfo_clear(module->info, HI_MODULE_STATE_DIRTY);
return HI_OK;
}
@@ -317,18 +316,19 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
void *new_handle = dlopen(patch.filename, RTLD_LAZY);
if (!new_handle) {
log_error("Couldn't load: %s\n", dlerror());
module->info = hi_modinfo_clear(module->info, HI_MODULE_STATE_DIRTY);
module->info = modinfo_clear(module->info, HI_MODULE_STATE_DIRTY);
return HI_FAIL;
}
patch.dlhandle = new_handle;
// refresh cache
if (!HIOK(memmaps_from_process(memmaps))) {
VectorMemoryMap memmaps;
vector_init(&memmaps);
if (!HIOK(memmaps_from_process(&memmaps))) {
log_error("Failed to collect memory information for process\n");
return HI_FAIL;
}
patch.memreg = memmaps_find_by_name(patch.filename, memmaps);
patch.memreg = memmaps_find_by_name(patch.filename, &memmaps);
void *patch_base = (void *)patch.memreg.start;
VectorSymbol patch_symbols;
@@ -344,11 +344,11 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
for (size_t i = 0; i < vector_size(modules); ++i) {
ModuleData mod = vector_at(modules, i);
if (!hi_modinfo_has(mod.info, HI_MODULE_STATE_PATCHABLE))
if (!modinfo_has(mod.info, HI_MODULE_STATE_PATCHABLE))
continue;
log_debug("Patching: %s\n", mod.name);
MemorySpan module_memory = memmaps_find_by_name(mod.name, memmaps);
MemorySpan module_memory = memmaps_find_by_name(mod.name, &memmaps);
moduler_apply_module_patch(&patch_symbols, module_memory);
if (strncmp(mod.name, patch.filename, strlen(mod.name)) == 0) {
@@ -383,7 +383,7 @@ HiResult moduler_reload(VectorModuleData *modules, ModuleData *module,
symbol_term(&module_symbols);
}
module->info = hi_modinfo_clear(module->info, HI_MODULE_STATE_DIRTY);
module->info = modinfo_clear(module->info, HI_MODULE_STATE_DIRTY);
}
free((char *)patch.filename);