From b7d75933425c66aa4c5133f081821695e5593143 Mon Sep 17 00:00:00 2001 From: Maijin Date: Tue, 19 Jul 2016 23:55:36 +0200 Subject: [PATCH] Add wcj --- libr/core/cmd_write.c | 7 +++++-- libr/io/cache.c | 35 ++++++++++++++++++++++++----------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/libr/core/cmd_write.c b/libr/core/cmd_write.c index ed11c954e9..7687141f62 100644 --- a/libr/core/cmd_write.c +++ b/libr/core/cmd_write.c @@ -861,12 +861,15 @@ static int cmd_write(void *data, const char *input) { } break; case '*': - r_io_cache_list (core->io, true); + r_io_cache_list (core->io, 1); + break; + case 'j': + r_io_cache_list (core->io, 2); break; case '\0': //if (!r_config_get_i (core->config, "io.cache")) // eprintf ("[warning] e io.cache must be true\n"); - r_io_cache_list (core->io, false); + r_io_cache_list (core->io, 0); break; } break; diff --git a/libr/io/cache.c b/libr/io/cache.c index 991018ef9a..732614bca5 100644 --- a/libr/io/cache.c +++ b/libr/io/cache.c @@ -74,18 +74,29 @@ R_API int r_io_cache_list(RIO *io, int rad) { int i, j = 0; RListIter *iter; RIOCache *c; - + if (rad == 2) + io->cb_printf ("["); r_list_foreach (io->cache, iter, c) { - if (rad) { - io->cb_printf ("wx "); - for (i=0; i < c->size; i++) - io->cb_printf ("%02x", (ut8)(c->data[i] & 0xff)); - io->cb_printf (" @ 0x%08"PFMT64x, c->from); - io->cb_printf (" # replaces: "); - for (i=0; i < c->size; i++) - io->cb_printf ("%02x", (ut8)(c->odata[i] & 0xff)); - io->cb_printf ("\n"); - } else { + if (rad == 1) { + io->cb_printf ("wx "); + for (i=0; i < c->size; i++) + io->cb_printf ("%02x", (ut8)(c->data[i] & 0xff)); + io->cb_printf (" @ 0x%08"PFMT64x, c->from); + io->cb_printf (" # replaces: "); + for (i=0; i < c->size; i++) + io->cb_printf ("%02x", (ut8)(c->odata[i] & 0xff)); + io->cb_printf ("\n"); + } else if (rad == 2) { + io->cb_printf ("{\"idx\":%"PFMT64d",\"addr\":%"PFMT64d",\"size\":%d,", + j, c->from, c->size); + io->cb_printf ("\"before\":\""); + for (i=0; i < c->size; i++) + io->cb_printf ("%02x", c->odata[i]); + io->cb_printf ("\",\"after\":\""); + for (i=0; i < c->size; i++) + io->cb_printf ("%02x", c->data[i]); + io->cb_printf ("\",\"written\":%s}%s", c->written? "true": "false",iter->n? ",": ""); + } else if (rad == 0) { io->cb_printf ("idx=%d addr=0x%08"PFMT64x" size=%d ", j, c->from, c->size); for (i=0; i < c->size; i++) @@ -97,6 +108,8 @@ R_API int r_io_cache_list(RIO *io, int rad) { } j++; } + if (rad == 2) + io->cb_printf ("]"); return false; }