mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-26 00:55:59 +00:00
Fix #4195 - Remove r_cons dependency from r_flags
This commit is contained in:
parent
4b263b3475
commit
61b7f4af37
@ -1377,6 +1377,7 @@ R_API int r_core_init(RCore *core) {
|
||||
r_io_undo_enable (core->io, 1, 0); // TODO: configurable via eval
|
||||
core->fs = r_fs_new ();
|
||||
core->flags = r_flag_new ();
|
||||
core->flags->cb_printf = r_cons_printf;
|
||||
core->graph = r_agraph_new (r_cons_canvas_new (1, 1));
|
||||
core->graph->need_reload_nodes = false;
|
||||
core->asmqjmps_size = R_CORE_ASMQJMPS_NUM;
|
||||
|
@ -1,7 +1,7 @@
|
||||
include ../config.mk
|
||||
|
||||
NAME=r_flags
|
||||
DEPS=r_util r_cons
|
||||
DEPS=r_util
|
||||
OBJS=flags.o sort.o spaces.o
|
||||
|
||||
include ../rules.mk
|
||||
|
@ -71,6 +71,7 @@ R_API RFlag * r_flag_new() {
|
||||
return NULL;
|
||||
}
|
||||
f->base = 0;
|
||||
f->cb_printf = (PrintfCallback)printf;
|
||||
f->flags = r_list_new ();
|
||||
if (!f->flags) {
|
||||
r_flag_free (f);
|
||||
@ -153,7 +154,7 @@ R_API void r_flag_list(RFlag *f, int rad, const char *pfx) {
|
||||
switch (rad) {
|
||||
case 'j': {
|
||||
int first = 1;
|
||||
r_cons_printf ("[");
|
||||
f->cb_printf ("[");
|
||||
r_list_foreach (f->flags, iter, flag) {
|
||||
if (IS_IN_SPACE (f, flag)) {
|
||||
continue;
|
||||
@ -161,19 +162,19 @@ R_API void r_flag_list(RFlag *f, int rad, const char *pfx) {
|
||||
if (in_range && (flag->offset < range_from || flag->offset >= range_to)) {
|
||||
continue;
|
||||
}
|
||||
r_cons_printf ("%s{\"name\":\"%s\",\"size\":\"%"PFMT64d"\",",
|
||||
f->cb_printf ("%s{\"name\":\"%s\",\"size\":\"%"PFMT64d"\",",
|
||||
first?"":",", flag->name, flag->size);
|
||||
if (flag->alias) {
|
||||
r_cons_printf ("\"alias\":\"%s\"", flag->alias);
|
||||
f->cb_printf ("\"alias\":\"%s\"", flag->alias);
|
||||
} else {
|
||||
r_cons_printf ("\"offset\":%"PFMT64d, flag->offset);
|
||||
f->cb_printf ("\"offset\":%"PFMT64d, flag->offset);
|
||||
}
|
||||
if (flag->comment)
|
||||
r_cons_printf (",\"comment\":\"}");
|
||||
else r_cons_printf ("}");
|
||||
f->cb_printf (",\"comment\":\"}");
|
||||
else f->cb_printf ("}");
|
||||
first = 0;
|
||||
}
|
||||
r_cons_printf ("]\n");
|
||||
f->cb_printf ("]\n");
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
@ -191,15 +192,15 @@ R_API void r_flag_list(RFlag *f, int rad, const char *pfx) {
|
||||
flagspace = r_flag_space_get_i (f, fs);
|
||||
if (!flagspace || !*flagspace)
|
||||
flagspace = "*";
|
||||
r_cons_printf ("fs %s\n", flagspace);
|
||||
f->cb_printf ("fs %s\n", flagspace);
|
||||
}
|
||||
if (flag->alias) {
|
||||
r_cons_printf ("fa %s %s\n", flag->name, flag->alias);
|
||||
f->cb_printf ("fa %s %s\n", flag->name, flag->alias);
|
||||
if (flag->comment && *flag->comment)
|
||||
r_cons_printf ("\"fC %s %s\"\n",
|
||||
f->cb_printf ("\"fC %s %s\"\n",
|
||||
flag->name, flag->comment);
|
||||
} else {
|
||||
r_cons_printf ("f %s %"PFMT64d" 0x%08"PFMT64x"%s%s %s\n",
|
||||
f->cb_printf ("f %s %"PFMT64d" 0x%08"PFMT64x"%s%s %s\n",
|
||||
flag->name, flag->size, flag->offset,
|
||||
pfx?"+":"", pfx?pfx:"",
|
||||
flag->comment? flag->comment:"");
|
||||
@ -215,10 +216,10 @@ R_API void r_flag_list(RFlag *f, int rad, const char *pfx) {
|
||||
continue;
|
||||
}
|
||||
if (flag->alias) {
|
||||
r_cons_printf ("%s %"PFMT64d" %s\n",
|
||||
f->cb_printf ("%s %"PFMT64d" %s\n",
|
||||
flag->alias, flag->size, flag->realname);
|
||||
} else {
|
||||
r_cons_printf ("0x%08"PFMT64x" %"PFMT64d" %s\n",
|
||||
f->cb_printf ("0x%08"PFMT64x" %"PFMT64d" %s\n",
|
||||
flag->offset, flag->size, flag->realname);
|
||||
}
|
||||
}
|
||||
@ -232,10 +233,10 @@ R_API void r_flag_list(RFlag *f, int rad, const char *pfx) {
|
||||
continue;
|
||||
}
|
||||
if (flag->alias) {
|
||||
r_cons_printf ("%s %"PFMT64d" %s\n",
|
||||
f->cb_printf ("%s %"PFMT64d" %s\n",
|
||||
flag->alias, flag->size, flag->name);
|
||||
} else {
|
||||
r_cons_printf ("0x%08"PFMT64x" %"PFMT64d" %s\n",
|
||||
f->cb_printf ("0x%08"PFMT64x" %"PFMT64d" %s\n",
|
||||
flag->offset, flag->size, flag->name);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* radare - LGPL - Copyright 2008-2015 - pancake */
|
||||
/* radare - LGPL - Copyright 2008-2016 - pancake */
|
||||
|
||||
#include <r_flags.h>
|
||||
#include <r_cons.h>
|
||||
@ -55,14 +55,14 @@ R_API int r_flag_space_set(RFlag *f, const char *name) {
|
||||
return f->space_idx;
|
||||
}
|
||||
|
||||
for (i=0; i<R_FLAG_SPACES_MAX; i++) {
|
||||
for (i = 0; i < R_FLAG_SPACES_MAX; i++) {
|
||||
if (f->spaces[i] != NULL && !strcmp (name, f->spaces[i])) {
|
||||
f->space_idx = i;
|
||||
return f->space_idx;
|
||||
}
|
||||
}
|
||||
/* not found */
|
||||
for (i=0; i<R_FLAG_SPACES_MAX; i++) {
|
||||
for (i = 0; i < R_FLAG_SPACES_MAX; i++) {
|
||||
if (f->spaces[i] == NULL) {
|
||||
f->spaces[i] = strdup (name);
|
||||
f->space_idx = i;
|
||||
@ -113,17 +113,17 @@ R_API int r_flag_space_list(RFlag *f, int mode) {
|
||||
const char *defspace = NULL;
|
||||
int count, len, i, j = 0;
|
||||
if (mode == 'j')
|
||||
r_cons_printf ("[");
|
||||
f->cb_printf ("[");
|
||||
for (i=0; i<R_FLAG_SPACES_MAX; i++) {
|
||||
if (!f->spaces[i]) continue;
|
||||
count = r_flag_space_count (f, i);
|
||||
if (mode=='j') {
|
||||
r_cons_printf ("%s{\"name\":\"%s\"%s,\"count\":%d}",
|
||||
f->cb_printf ("%s{\"name\":\"%s\"%s,\"count\":%d}",
|
||||
j? ",":"", f->spaces[i],
|
||||
(i==f->space_idx)? ",\"selected\":true":"",
|
||||
count);
|
||||
} else if (mode=='*') {
|
||||
r_cons_printf ("fs %s\n", f->spaces[i]);
|
||||
f->cb_printf ("fs %s\n", f->spaces[i]);
|
||||
if (i==f->space_idx) defspace = f->spaces[i];
|
||||
} else {
|
||||
#define INDENT 5
|
||||
@ -132,33 +132,40 @@ R_API int r_flag_space_list(RFlag *f, int mode) {
|
||||
snprintf (num1, sizeof (num1), "%d", count);
|
||||
memset(spaces, ' ', sizeof (spaces));
|
||||
len = strlen (num0) + strlen (num1);
|
||||
if (len<INDENT) {
|
||||
if (len < INDENT) {
|
||||
spaces[INDENT-len] = 0;
|
||||
} else spaces[0] = 0;
|
||||
r_cons_printf ("%s%s %s %c %s\n", num0, spaces, num1,
|
||||
} else {
|
||||
spaces[0] = 0;
|
||||
}
|
||||
f->cb_printf ("%s%s %s %c %s\n", num0, spaces, num1,
|
||||
(i==f->space_idx)?'*':'.',
|
||||
f->spaces[i]);
|
||||
}
|
||||
j++;
|
||||
}
|
||||
if (defspace)
|
||||
r_cons_printf ("fs %s # current\n", defspace);
|
||||
if (mode == 'j')
|
||||
r_cons_printf ("]\n");
|
||||
if (defspace) {
|
||||
f->cb_printf ("fs %s # current\n", defspace);
|
||||
}
|
||||
if (mode == 'j') {
|
||||
f->cb_printf ("]\n");
|
||||
}
|
||||
return j;
|
||||
}
|
||||
|
||||
R_API int r_flag_space_rename (RFlag *f, const char *oname, const char *nname) {
|
||||
int i;
|
||||
if (!oname) {
|
||||
if (f->space_idx == -1)
|
||||
if (f->space_idx == -1) {
|
||||
return false;
|
||||
}
|
||||
oname = f->spaces[f->space_idx];
|
||||
}
|
||||
if (!nname) return false;
|
||||
if (!nname) {
|
||||
return false;
|
||||
}
|
||||
while (*oname==' ') oname++;
|
||||
while (*nname==' ') nname++;
|
||||
for (i=0; i<R_FLAG_SPACES_MAX; i++) {
|
||||
for (i = 0; i < R_FLAG_SPACES_MAX; i++) {
|
||||
if (f->spaces[i] && !strcmp (oname, f->spaces[i])) {
|
||||
free (f->spaces[i]);
|
||||
f->spaces[i] = strdup (nname);
|
||||
|
@ -38,6 +38,7 @@ typedef struct r_flag_t {
|
||||
RHashTable64 *ht_name; /* hashmap key=item name, value=RList of items */
|
||||
RList *flags; /* list of RFlagItem contained in the flag */
|
||||
RList *spacestack;
|
||||
PrintfCallback cb_printf;
|
||||
} RFlag;
|
||||
|
||||
/* compile time dependency */
|
||||
|
Loading…
x
Reference in New Issue
Block a user