| diff -aruN a/nanddump.c b/nanddump.c |
| --- a/nanddump.c 2011-11-02 21:48:36.159532935 -0700 |
| +++ b/nanddump.c 2011-11-04 12:20:36.000000000 -0700 |
| @@ -54,6 +54,7 @@ |
| "-p --prettyprint Print nice (hexdump)\n" |
| "-q --quiet Don't display progress and status messages\n" |
| "-s addr --startaddress=addr Start address\n" |
| +"-e --omitempty Omit empty pages\n" |
| ); |
| exit(EXIT_SUCCESS); |
| } |
| @@ -83,6 +84,7 @@ |
| static const char *dumpfile; // dump file name |
| static bool omitbad = false; |
| static bool quiet = false; // suppress diagnostic output |
| +static bool omitempty = false; // don't output empty pages |
| |
| static void process_options (int argc, char * const argv[]) |
| { |
| @@ -90,7 +92,7 @@ |
| |
| for (;;) { |
| int option_index = 0; |
| - static const char *short_options = "bs:f:il:opqn"; |
| + static const char *short_options = "bs:f:il:opqne"; |
| static const struct option long_options[] = { |
| {"help", no_argument, 0, 0}, |
| {"version", no_argument, 0, 0}, |
| @@ -103,6 +105,7 @@ |
| {"length", required_argument, 0, 'l'}, |
| {"noecc", no_argument, 0, 'n'}, |
| {"quiet", no_argument, 0, 'q'}, |
| + {"omitempty", no_argument, 0, 'e'}, |
| {0, 0, 0, 0}, |
| }; |
| |
| @@ -153,6 +156,9 @@ |
| case 'n': |
| noecc = true; |
| break; |
| + case 'e': |
| + omitempty = true; |
| + break; |
| case '?': |
| error++; |
| break; |
| @@ -192,6 +198,7 @@ |
| struct nand_oobinfo old_oobinfo; |
| struct mtd_ecc_stats stat1, stat2; |
| bool eccstats = false; |
| + bool isempty; |
| |
| process_options(argc, argv); |
| |
| @@ -329,6 +336,23 @@ |
| stat1 = stat2; |
| } |
| |
| + if (omitempty) { |
| + isempty = true; |
| + for (i = 0; i < bs; i++) { |
| + if (readbuf[i] != 0xff) { |
| + isempty = false; |
| + break; |
| + } |
| + } |
| + |
| + if (isempty) { |
| + if (!quiet) |
| + fprintf(stderr, "Skipping empty page at offset 0x%08lx\n", ofs); |
| + |
| + continue; |
| + } |
| + } |
| + |
| /* Write out page data */ |
| if (pretty_print) { |
| for (i = 0; i < bs; i += 16) { |
| diff -aruN a/nandwrite.c b/nandwrite.c |
| --- a/nandwrite.c 2011-11-02 21:48:36.159532935 -0700 |
| +++ b/nandwrite.c 2011-11-03 15:54:26.949570997 -0700 |
| @@ -486,6 +486,9 @@ |
| |
| if (baderaseblock) { |
| mtdoffset = blockstart + meminfo.erasesize; |
| + if (mtdoffset >= meminfo.size) { |
| + goto closeall; |
| + } |
| } |
| offs += meminfo.erasesize / blockalign ; |
| } while ( offs < blockstart + meminfo.erasesize ); |