Use RzOutputMode for rz_core_file_print() (o cmd) (#1769)

This commit is contained in:
Anton Kochkov 2021-10-04 16:27:02 +08:00 committed by GitHub
parent 5b7b0944aa
commit e75fbc5551
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 36 deletions

View file

@ -1299,7 +1299,40 @@ RZ_API RzCoreFile *rz_core_file_get_by_fd(RzCore *core, int fd) {
return NULL;
}
RZ_API int rz_core_file_list(RzCore *core, int mode) {
RZ_API bool rz_core_raw_file_print(RzCore *core) {
RzCoreFile *f;
RzIODesc *desc;
RzBinFile *bf;
RzListIter *it1, *it2, *it3;
rz_list_foreach (core->files, it1, f) {
desc = rz_io_desc_get(core->io, f->fd);
if (!desc) {
continue;
}
bool header_loaded = false;
rz_list_foreach (core->bin->binfiles, it2, bf) {
if (bf->fd == f->fd) {
header_loaded = true;
break;
}
}
if (!header_loaded) {
RzList *maps = rz_io_map_get_for_fd(core->io, f->fd);
RzIOMap *current_map;
char *absfile = rz_file_abspath(desc->uri);
rz_list_foreach (maps, it3, current_map) {
if (current_map) {
rz_cons_printf("on %s 0x%" PFMT64x "\n", absfile, current_map->itv.addr);
}
}
rz_list_free(maps);
free(absfile);
}
}
return true;
}
RZ_API bool rz_core_file_print(RzCore *core, RzOutputMode mode) {
int count = 0;
RzCoreFile *f;
RzIODesc *desc;
@ -1308,10 +1341,10 @@ RZ_API int rz_core_file_list(RzCore *core, int mode) {
RzBinFile *bf;
RzListIter *iter;
PJ *pj = NULL;
if (mode == 'j') {
if (mode == RZ_OUTPUT_MODE_JSON) {
pj = pj_new();
if (!pj) {
return 0;
return false;
}
pj_a(pj);
}
@ -1323,7 +1356,7 @@ RZ_API int rz_core_file_list(RzCore *core, int mode) {
}
from = 0LL;
switch (mode) {
case 'j': { // "oij"
case RZ_OUTPUT_MODE_JSON: { // "oij"
pj_o(pj);
pj_kb(pj, "raised", core->io->desc->fd == f->fd);
pj_ki(pj, "fd", f->fd);
@ -1334,8 +1367,7 @@ RZ_API int rz_core_file_list(RzCore *core, int mode) {
pj_end(pj);
break;
}
case '*':
case 'r':
case RZ_OUTPUT_MODE_RIZIN:
// TODO: use a getter
{
bool fileHaveBin = false;
@ -1352,28 +1384,6 @@ RZ_API int rz_core_file_list(RzCore *core, int mode) {
free(absfile);
}
break;
case 'n': {
bool header_loaded = false;
rz_list_foreach (core->bin->binfiles, it, bf) {
if (bf->fd == f->fd) {
header_loaded = true;
break;
}
}
if (!header_loaded) {
RzList *maps = rz_io_map_get_for_fd(core->io, f->fd);
RzListIter *iter;
RzIOMap *current_map;
char *absfile = rz_file_abspath(desc->uri);
rz_list_foreach (maps, iter, current_map) {
if (current_map) {
rz_cons_printf("on %s 0x%" PFMT64x "\n", absfile, current_map->itv.addr);
}
}
rz_list_free(maps);
free(absfile);
}
} break;
default: {
ut64 sz = rz_io_desc_size(desc);
const char *fmt;
@ -1392,12 +1402,12 @@ RZ_API int rz_core_file_list(RzCore *core, int mode) {
}
count++;
}
if (mode == 'j') {
if (mode == RZ_OUTPUT_MODE_JSON) {
pj_end(pj);
rz_cons_println(pj_string(pj));
pj_free(pj);
}
return count;
return true;
}
// XXX - needs to account for binfile index and bin object index

View file

@ -1136,7 +1136,7 @@ RZ_IPI int rz_cmd_open(void *data, const char *input) {
}
case 'n': // "on"
if (input[1] == '*') {
rz_core_file_list(core, 'n');
rz_core_raw_file_print(core);
return 0;
}
if (input[1] == '+') { // "on+"
@ -1291,7 +1291,7 @@ RZ_IPI int rz_cmd_open(void *data, const char *input) {
rz_core_cmd_help(core, help_msg_o_star);
break;
}
rz_core_file_list(core, (int)(*input));
rz_core_file_print(core, RZ_OUTPUT_MODE_RIZIN);
break;
case 'j': // "oj"
if ('?' == input[1]) {
@ -1354,10 +1354,14 @@ RZ_IPI int rz_cmd_open(void *data, const char *input) {
}
} break;
case 'j': // "oij"
case '*': // "oi*"
case 0: // "oi"
rz_core_file_list(core, input[1]);
rz_core_file_print(core, RZ_OUTPUT_MODE_JSON);
break;
case '*': // "oi*"
rz_core_file_print(core, RZ_OUTPUT_MODE_RIZIN);
break;
case 0: // "oi"
break;
rz_core_file_print(core, RZ_OUTPUT_MODE_STANDARD);
}
break;
case 'u': { // "ou"

View file

@ -564,7 +564,8 @@ RZ_API RzCoreFile *rz_core_file_get_by_fd(RzCore *core, int fd);
RZ_API void rz_core_file_close(RzCoreFile *fh);
RZ_API bool rz_core_file_close_fd(RzCore *core, int fd);
RZ_API bool rz_core_file_close_all_but(RzCore *core);
RZ_API int rz_core_file_list(RzCore *core, int mode);
RZ_API bool rz_core_raw_file_print(RzCore *core);
RZ_API bool rz_core_file_print(RzCore *core, RzOutputMode mode);
RZ_API int rz_core_file_binlist(RzCore *core);
RZ_API bool rz_core_file_bin_raise(RzCore *core, ut32 num);
RZ_API bool rz_core_extend_at(RzCore *core, ut64 addr, int size);