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;
}
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) {
RCore *core = user;
RConfigNode *node = data;
R_RETURN_VAL_IF_FAIL (node && core && core->anal && core->anal->arch, false);
if (!strcmp (node->value, "big") || !strcmp (node->value, "bigswap")) {
r_core_esil_unload_arch (core);
r_arch_set_endian (core->anal->arch, R_SYS_ENDIAN_BIG);
RConfigNode *be = r_config_node_get (core->config, "cfg.bigendian");
if (be) {
free (be->value);
be->value = strdup ("true");
be->i_value = 1;
}
r_core_esil_load_arch (core);
return true;
}
if (!strcmp (node->value, "little") || !strcmp (node->value, "littleswap")) {
r_core_esil_unload_arch (core);
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")) {
r_core_esil_unload_arch (core);
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;
}
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")) {
endian = R_SYS_ENDIAN_BIG;
is_big = true;
} else if (!strcmp (node->value, "little") || !strcmp (node->value, "littleswap")) {
endian = R_SYS_ENDIAN_LITTLE;
} else if (!strcmp (node->value, "middle")) {
endian = R_SYS_ENDIAN_MIDDLE;
} else {
return false;
}
if (!core_arch_set_endian_reload (core, endian)) {
return false;
}
core_config_set_bigendian (core, is_big);
return true;
}
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->rasm->config->endian = endianType;
r_core_esil_unload_arch (core);
r_arch_set_endian (core->anal->arch, endianType);
if (!core_arch_set_endian_reload (core, endianType)) {
return false;
}
RConfigNode *ae = r_config_node_get (core->config, "arch.endian");
if (ae) {
free (ae->value);
ae->value = strdup (node->i_value? "big": "little");
}
r_core_esil_load_arch (core);
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;
}
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) {
RCore *core = user;
RConfigNode *node = data;
if (core) {
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) {
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;
@@ -2495,9 +2486,10 @@ static bool cb_cmd_esil_todo(void *user, void *data) {
RConfigNode *node = (RConfigNode *)data;
if (core) {
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) {
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;
@@ -2508,9 +2500,10 @@ static bool cb_cmd_esil_intr(void *user, void *data) {
RConfigNode *node = (RConfigNode *)data;
if (core) {
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) {
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;
@@ -2521,9 +2514,11 @@ static bool cb_mdevrange(void *user, void *data) {
RConfigNode *node = data;
if (core) {
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) {
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;
@@ -2544,9 +2539,10 @@ static bool cb_cmd_esil_step(void *user, void *data) {
RConfigNode *node = data;
if (core) {
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) {
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;
@@ -2557,9 +2553,10 @@ static bool cb_cmd_esil_step_out(void *user, void *data) {
RConfigNode *node = data;
if (core) {
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) {
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;
@@ -2570,9 +2567,10 @@ static bool cb_cmd_esil_mdev(void *user, void *data) {
RConfigNode *node = data;
if (core) {
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) {
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;
@@ -2583,10 +2581,12 @@ static bool cb_cmd_esil_trap(void *user, void *data) {
RConfigNode *node = (RConfigNode *)data;
if (core) {
core_esil_set_cmd (&core->esil.cmds.trap, node->value);
legacy_esil_set_cmd (&core->esil.esil, &core->esil.esil.cmd_trap, node->value);
REsil *esil = core_legacy_esil (core);
core->esil.esil.cmd = r_core_esil_cmd;
core_esil_set_cmd (&core->esil.esil.cmd_trap, node->value);
REsil *esil = R_UNWRAP3 (core, anal, 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;

View File

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