mirror of
https://github.com/radareorg/radare2.git
synced 2024-11-26 22:50:48 +00:00
Fix #23639 - Implement e+ command to set config vars in r2rc ##core
This commit is contained in:
parent
41b9e74305
commit
0c9f8c4266
@ -627,6 +627,72 @@ static bool cmd_ec(RCore *core, const char *input) {
|
||||
return true;
|
||||
}
|
||||
|
||||
static void r2rc_set(RCore *core, R_NULLABLE const char *k, R_NULLABLE const char *v) {
|
||||
char *rcfile = r_file_home (".radare2rc");
|
||||
char *rcdata = r_file_slurp (rcfile, NULL);
|
||||
if (k) {
|
||||
char *line;
|
||||
RListIter *iter;
|
||||
RList *lines = r_str_split_list (rcdata, "\n", 0);
|
||||
RStrBuf *sb = r_strbuf_new ("");
|
||||
bool found = false;
|
||||
char *kk = r_str_newf ("e %s", k);
|
||||
r_list_foreach (lines, iter, line) {
|
||||
const char *oline = line;
|
||||
if (*oline == '\'') {
|
||||
oline++;
|
||||
}
|
||||
if (r_str_startswith (oline, kk)) {
|
||||
if (v) {
|
||||
if (!found && *v) {
|
||||
r_strbuf_appendf (sb, "'e %s=%s\n", k, v);
|
||||
}
|
||||
} else {
|
||||
r_cons_println (line);
|
||||
}
|
||||
found = true;
|
||||
} else {
|
||||
r_strbuf_appendf (sb, "%s\n", line);
|
||||
}
|
||||
}
|
||||
free (kk);
|
||||
if (v) {
|
||||
if (!found && *v) {
|
||||
r_strbuf_appendf (sb, "'e %s=%s\n", k, v);
|
||||
}
|
||||
char *out = r_strbuf_drain (sb);
|
||||
r_list_free (lines);
|
||||
r_str_trim (out);
|
||||
r_file_dump (rcfile, (const ut8*)out, -1, false);
|
||||
free (out);
|
||||
}
|
||||
} else {
|
||||
r_cons_println (rcdata);
|
||||
}
|
||||
free (rcdata);
|
||||
free (rcfile);
|
||||
}
|
||||
|
||||
static void cmd_eplus(RCore *core, const char *input) {
|
||||
char *s = r_str_trim_dup (input);
|
||||
char *eq = strchr (s, '=');
|
||||
if (*s) {
|
||||
if (eq) {
|
||||
r_str_trim (s);
|
||||
*eq++ = 0;
|
||||
r_str_trim (eq);
|
||||
const char *k = s;
|
||||
const char *v = eq;
|
||||
r2rc_set (core, k, v);
|
||||
} else {
|
||||
r2rc_set (core, s, NULL);
|
||||
}
|
||||
} else {
|
||||
r2rc_set (core, NULL, NULL);
|
||||
}
|
||||
free (s);
|
||||
}
|
||||
|
||||
static int cmd_eval(void *data, const char *input) {
|
||||
RCore *core = (RCore *)data;
|
||||
switch (input[0]) {
|
||||
@ -640,9 +706,6 @@ static int cmd_eval(void *data, const char *input) {
|
||||
default: r_config_list (core->config, input + 1, 3); break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
r_core_return_invalid_command (core, "e", *input);
|
||||
break;
|
||||
case 't': // "et"
|
||||
if (input[1] == 'a') {
|
||||
r_cons_printf ("%s\n", (r_num_rand (10) % 2)? "wen": "son");
|
||||
@ -774,6 +837,9 @@ static int cmd_eval(void *data, const char *input) {
|
||||
free (file);
|
||||
}
|
||||
break;
|
||||
case '+': // "e+"
|
||||
cmd_eplus (core, input + 1);
|
||||
break;
|
||||
case 'e': // "ee"
|
||||
if (input[1] == ' ') {
|
||||
char *p;
|
||||
@ -842,6 +908,9 @@ static int cmd_eval(void *data, const char *input) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
r_core_return_invalid_command (core, "e", *input);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -494,7 +494,7 @@ static const char *radare_argv[] = {
|
||||
"dts?", "dts", "dts+", "dts-", "dtsf", "dtst", "dtsC", "dtt",
|
||||
"dw",
|
||||
"dx?", "dx", "dxa", "dxe", "dxr", "dxs",
|
||||
"e?", "e", "-e", "-i", "e-", "e*", "e!", "ec", "ee?", "ee", "?ed", "ed", "ej", "env", "er", "es", "et", "ev", "evj",
|
||||
"e?", "e", "e+", "-e", "-i", "e-", "e*", "e!", "ec", "ee?", "ee", "?ed", "ed", "ej", "env", "er", "es", "et", "ev", "evj",
|
||||
"ec?", "ec", "ec*", "ecd", "ecr", "ecs", "ecj", "ecc", "eco", "ecp", "ecn",
|
||||
"ecH?", "ecH", "ecHi", "ecHw", "ecH-",
|
||||
"f?", "f", "f.", "f*", "f-", "f--", "f+", "f=", "fa", "fb", "fc?", "fc", "fC", "fd", "fe-", "fe",
|
||||
@ -2212,7 +2212,7 @@ static void __init_autocomplete_default(RCore* core) {
|
||||
"afc", "axg", "axt", "axf", "dcu", "ag", "agfl", "aecu", "aesu", "aeim", NULL
|
||||
};
|
||||
const char *evals[] = {
|
||||
"-e", "e", "ee", "et", "e?", "e!", "ev", "evj", NULL
|
||||
"-e", "e", "e+", "ee", "et", "e?", "e!", "ev", "evj", NULL
|
||||
};
|
||||
const char *breaks[] = {
|
||||
"db-", "dbc", "dbC", "dbd", "dbe", "dbs", "dbi", "dbte", "dbtd", "dbts", NULL
|
||||
|
Loading…
Reference in New Issue
Block a user