With the "skip bad block" option, nanddump is not dumping the right length if there's bad blocks.
This patch moves the end read address each time a bad block is encountered. Signed-off-by: Richard Genoud <[email protected]> --- miscutils/nandwrite.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/miscutils/nandwrite.c b/miscutils/nandwrite.c index 8c4da802f6b3..a3593adedc82 100644 --- a/miscutils/nandwrite.c +++ b/miscutils/nandwrite.c @@ -166,6 +166,10 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv) int bad_len = MIN(tmp, end_addr) - mtdoffset; dump_bad(&meminfo, bad_len, opts & OPT_o); } + /* with option skip bad block, increase the length */ + if (IS_NANDDUMP && (opts & OPT_b)) { + end_addr += (tmp - blockstart); + } mtdoffset = tmp; } } @@ -182,9 +186,16 @@ int nandwrite_main(int argc UNUSED_PARAM, char **argv) mtdoffset = next_good_eraseblock(fd, &meminfo, blockstart); if (IS_NANDWRITE) printf("Writing at 0x%08x\n", mtdoffset); - else if (mtdoffset > blockstart && !(opts & OPT_b)) { - int bad_len = MIN(mtdoffset, limit) - blockstart; - dump_bad(&meminfo, bad_len, opts & OPT_o); + else if (mtdoffset > blockstart) { + if (opts & OPT_b) { + /* omit bad block, but increase the length */ + end_addr += (mtdoffset - blockstart); + limit = MIN(meminfo.size, end_addr); + } else { + /* dump bad block if asked */ + int bad_len = MIN(mtdoffset, limit) - blockstart; + dump_bad(&meminfo, bad_len, opts & OPT_o); + } } if (mtdoffset >= limit) break; -- 1.8.5.5 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
