Fix regressions in afv

This commit is contained in:
pancake 2019-08-10 14:17:38 +02:00 committed by radare
parent 5a4178a9b2
commit c105287f10

View File

@ -1051,19 +1051,8 @@ static int cmd_an(RCore *core, bool use_json, const char *name)
}
static int var_cmd(RCore *core, const char *str) {
char *p, *ostr;
int delta, type = *str, res = true;
RAnalVar *v1;
if (!str[0] || str[1] == '?'|| str[0] == '?') {
var_help (core, *str);
return res;
}
RAnalFunction *fcn = r_anal_get_fcn_in (core->anal, core->offset, -1);
if (!fcn) {
eprintf ("afv: Cannot find function in 0x%08"PFMT64x"\n", core->offset);
return false;
}
ostr = p = NULL;
if (!str[0]) {
// "afv"
r_core_cmd0 (core, "afvs");
@ -1071,6 +1060,10 @@ static int var_cmd(RCore *core, const char *str) {
r_core_cmd0 (core, "afvr");
return true;
}
if (!str[0] || str[1] == '?'|| str[0] == '?') {
var_help (core, *str);
return res;
}
if (str[0] == 'j') {
// "afvj"
r_cons_printf ("{\"sp\":");
@ -1082,7 +1075,9 @@ static int var_cmd(RCore *core, const char *str) {
r_cons_printf ("}\n");
return true;
}
ostr = p = strdup (str);
char *p = strdup (str);
char *ostr = p;
RAnalFunction *fcn = r_anal_get_fcn_in (core->anal, core->offset, -1);
/* Variable access CFvs = set fun var */
switch (str[0]) {
case '-':
@ -1094,18 +1089,26 @@ static int var_cmd(RCore *core, const char *str) {
case 'R': // "afvR"
case 'W': // "afvW"
case '*': // "afv*"
{
if (fcn) {
char *name = r_str_trim_head (strchr (ostr, ' '));
list_vars (core, fcn, str[0], name);
return true;
} else {
eprintf ("afv: Cannot find function in 0x%08"PFMT64x"\n", core->offset);
return false;
}
case 'a': // "afva"
r_anal_var_delete_all (core->anal, fcn->addr, R_ANAL_VAR_KIND_REG);
r_anal_var_delete_all (core->anal, fcn->addr, R_ANAL_VAR_KIND_BPV);
r_anal_var_delete_all (core->anal, fcn->addr, R_ANAL_VAR_KIND_SPV);
r_core_recover_vars (core, fcn, false);
free (p);
return true;
if (fcn) {
r_anal_var_delete_all (core->anal, fcn->addr, R_ANAL_VAR_KIND_REG);
r_anal_var_delete_all (core->anal, fcn->addr, R_ANAL_VAR_KIND_BPV);
r_anal_var_delete_all (core->anal, fcn->addr, R_ANAL_VAR_KIND_SPV);
r_core_recover_vars (core, fcn, false);
free (p);
return true;
} else {
eprintf ("afv: Cannot find function in 0x%08"PFMT64x"\n", core->offset);
return false;
}
case 'n':
if (str[1]) { // "afvn"
RAnalOp *op = r_core_anal_op (core, core->offset, R_ANAL_OP_MASK_BASIC);