Address user review

This commit is contained in:
pancake
2026-05-08 12:40:57 +02:00
parent 6aec29e21b
commit a7e7473610
2 changed files with 66 additions and 69 deletions

View File

@@ -528,47 +528,48 @@ static bool cb_archbits_getter(RCore *core, RConfigNode *node) {
return true; return true;
} }
static bool core_arch_set_endian_reload(RCore *core, ut32 endian) {
if (core->anal->arch->cfg && core->anal->arch->cfg->endian == endian) {
return true;
}
r_core_esil_unload_arch (core);
bool ret = r_arch_set_endian (core->anal->arch, endian);
r_core_esil_load_arch (core);
return ret;
}
static void core_config_set_bigendian(RCore *core, bool is_big) {
RConfigNode *be = r_config_node_get (core->config, "cfg.bigendian");
if (be) {
free (be->value);
be->value = strdup (is_big? "true": "false");
be->i_value = is_big;
}
}
static bool cb_archendian(void *user, void *data) { static bool cb_archendian(void *user, void *data) {
RCore *core = user; RCore *core = user;
RConfigNode *node = data; RConfigNode *node = data;
R_RETURN_VAL_IF_FAIL (node && core && core->anal && core->anal->arch, false); if (!node || !node->value || !core || !core->anal || !core->anal->arch) {
return false;
}
ut32 endian;
bool is_big = false;
if (!strcmp (node->value, "big") || !strcmp (node->value, "bigswap")) { if (!strcmp (node->value, "big") || !strcmp (node->value, "bigswap")) {
r_core_esil_unload_arch (core); endian = R_SYS_ENDIAN_BIG;
r_arch_set_endian (core->anal->arch, R_SYS_ENDIAN_BIG); is_big = true;
RConfigNode *be = r_config_node_get (core->config, "cfg.bigendian"); } else if (!strcmp (node->value, "little") || !strcmp (node->value, "littleswap")) {
if (be) { endian = R_SYS_ENDIAN_LITTLE;
free (be->value); } else if (!strcmp (node->value, "middle")) {
be->value = strdup ("true"); endian = R_SYS_ENDIAN_MIDDLE;
be->i_value = 1; } else {
} return false;
r_core_esil_load_arch (core);
return true;
} }
if (!strcmp (node->value, "little") || !strcmp (node->value, "littleswap")) { if (!core_arch_set_endian_reload (core, endian)) {
r_core_esil_unload_arch (core); return false;
r_arch_set_endian (core->anal->arch, R_SYS_ENDIAN_LITTLE);
RConfigNode *be = r_config_node_get (core->config, "cfg.bigendian");
if (be) {
free (be->value);
be->value = strdup ("false");
be->i_value = 0;
}
r_core_esil_load_arch (core);
return true;
} }
if (!strcmp (node->value, "middle")) { core_config_set_bigendian (core, is_big);
r_core_esil_unload_arch (core); return true;
r_arch_set_endian (core->anal->arch, R_SYS_ENDIAN_MIDDLE);
RConfigNode *be = r_config_node_get (core->config, "cfg.bigendian");
if (be) {
free (be->value);
be->value = strdup ("false");
be->i_value = 0;
}
r_core_esil_load_arch (core);
return true;
}
return false;
} }
static bool cb_analrecont(void *user, void *data) { static bool cb_analrecont(void *user, void *data) {
@@ -1433,14 +1434,14 @@ static bool cb_bigendian(void *user, void *data) {
core->dbg->bp->endian = isbig; core->dbg->bp->endian = isbig;
} }
core->rasm->config->endian = endianType; core->rasm->config->endian = endianType;
r_core_esil_unload_arch (core); if (!core_arch_set_endian_reload (core, endianType)) {
r_arch_set_endian (core->anal->arch, endianType); return false;
}
RConfigNode *ae = r_config_node_get (core->config, "arch.endian"); RConfigNode *ae = r_config_node_get (core->config, "arch.endian");
if (ae) { if (ae) {
free (ae->value); free (ae->value);
ae->value = strdup (node->i_value? "big": "little"); ae->value = strdup (node->i_value? "big": "little");
} }
r_core_esil_load_arch (core);
return true; return true;
} }
@@ -2466,25 +2467,15 @@ static void core_esil_set_cmd(char **dst, const char *cmd) {
*dst = R_STR_ISNOTEMPTY (cmd)? strdup (cmd): NULL; *dst = R_STR_ISNOTEMPTY (cmd)? strdup (cmd): NULL;
} }
static void legacy_esil_set_cmd(REsil *esil, char **dst, const char *cmd) {
if (esil) {
esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (dst, cmd);
}
}
static REsil *core_legacy_esil(RCore *core) {
return R_UNWRAP3 (core, anal, esil);
}
static bool cb_cmd_esil_ioer(void *user, void *data) { static bool cb_cmd_esil_ioer(void *user, void *data) {
RCore *core = user; RCore *core = user;
RConfigNode *node = data; RConfigNode *node = data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.ioer, node->value); core_esil_set_cmd (&core->esil.cmds.ioer, node->value);
REsil *esil = core_legacy_esil (core); REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
legacy_esil_set_cmd (esil, &esil->cmd_ioer, node->value); esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (&esil->cmd_ioer, node->value);
} }
} }
return true; return true;
@@ -2495,9 +2486,10 @@ static bool cb_cmd_esil_todo(void *user, void *data) {
RConfigNode *node = (RConfigNode *)data; RConfigNode *node = (RConfigNode *)data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.todo, node->value); core_esil_set_cmd (&core->esil.cmds.todo, node->value);
REsil *esil = core_legacy_esil (core); REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
legacy_esil_set_cmd (esil, &esil->cmd_todo, node->value); esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (&esil->cmd_todo, node->value);
} }
} }
return true; return true;
@@ -2508,9 +2500,10 @@ static bool cb_cmd_esil_intr(void *user, void *data) {
RConfigNode *node = (RConfigNode *)data; RConfigNode *node = (RConfigNode *)data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.intr, node->value); core_esil_set_cmd (&core->esil.cmds.intr, node->value);
REsil *esil = core_legacy_esil (core); REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
legacy_esil_set_cmd (esil, &esil->cmd_intr, node->value); esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (&esil->cmd_intr, node->value);
} }
} }
return true; return true;
@@ -2521,9 +2514,11 @@ static bool cb_mdevrange(void *user, void *data) {
RConfigNode *node = data; RConfigNode *node = data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.mdev_range, node->value); core_esil_set_cmd (&core->esil.cmds.mdev_range, node->value);
REsil *esil = core_legacy_esil (core); REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
core_esil_set_cmd (&esil->mdev_range, node->value); esil->cmd = r_core_esil_cmd;
free (esil->mdev_range);
esil->mdev_range = strdup (node->value);
} }
} }
return true; return true;
@@ -2544,9 +2539,10 @@ static bool cb_cmd_esil_step(void *user, void *data) {
RConfigNode *node = data; RConfigNode *node = data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.step, node->value); core_esil_set_cmd (&core->esil.cmds.step, node->value);
REsil *esil = core_legacy_esil (core); REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
legacy_esil_set_cmd (esil, &esil->cmd_step, node->value); esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (&esil->cmd_step, node->value);
} }
} }
return true; return true;
@@ -2557,9 +2553,10 @@ static bool cb_cmd_esil_step_out(void *user, void *data) {
RConfigNode *node = data; RConfigNode *node = data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.step_out, node->value); core_esil_set_cmd (&core->esil.cmds.step_out, node->value);
REsil *esil = core_legacy_esil (core); REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
legacy_esil_set_cmd (esil, &esil->cmd_step_out, node->value); esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (&esil->cmd_step_out, node->value);
} }
} }
return true; return true;
@@ -2570,9 +2567,10 @@ static bool cb_cmd_esil_mdev(void *user, void *data) {
RConfigNode *node = data; RConfigNode *node = data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.mdev, node->value); core_esil_set_cmd (&core->esil.cmds.mdev, node->value);
REsil *esil = core_legacy_esil (core); REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
legacy_esil_set_cmd (esil, &esil->cmd_mdev, node->value); esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (&esil->cmd_mdev, node->value);
} }
} }
return true; return true;
@@ -2583,10 +2581,12 @@ static bool cb_cmd_esil_trap(void *user, void *data) {
RConfigNode *node = (RConfigNode *)data; RConfigNode *node = (RConfigNode *)data;
if (core) { if (core) {
core_esil_set_cmd (&core->esil.cmds.trap, node->value); core_esil_set_cmd (&core->esil.cmds.trap, node->value);
legacy_esil_set_cmd (&core->esil.esil, &core->esil.esil.cmd_trap, node->value); core->esil.esil.cmd = r_core_esil_cmd;
REsil *esil = core_legacy_esil (core); core_esil_set_cmd (&core->esil.esil.cmd_trap, node->value);
REsil *esil = R_UNWRAP3 (core, anal, esil);
if (esil) { if (esil) {
legacy_esil_set_cmd (esil, &esil->cmd_trap, node->value); esil->cmd = r_core_esil_cmd;
core_esil_set_cmd (&esil->cmd_trap, node->value);
} }
} }
return true; return true;

View File

@@ -2790,9 +2790,6 @@ R_API void r_core_fini(RCore *c) {
c->libstore = NULL; c->libstore = NULL;
r_lib_free (c->lib); r_lib_free (c->lib);
r_event_free (c->ev); r_event_free (c->ev);
/*
r_unref (c->anal->config);
*/
r_core_esil_fini (&c->esil); r_core_esil_fini (&c->esil);
if (c->anal->esil) { if (c->anal->esil) {
c->anal->esil->anal = NULL; c->anal->esil->anal = NULL;