skip over all-zero blocks when reading MTD partition

We fail to detect certain bad blocks (marked in the factory as bad, I
think?) when reading mtd partitions.  These come back as a block of
all zeros.  Since it's fairly unlikely a legitimate boot or recovery
block will contain 128k of zeros, change mtdutils to skip over such
blocks.

Arve says https://review.source.android.com/10535 may be a long-term
fix for this, but he isn't yet sure.
diff --git a/mtdutils/mtdutils.c b/mtdutils/mtdutils.c
index 2b0106f..fc06766 100644
--- a/mtdutils/mtdutils.c
+++ b/mtdutils/mtdutils.c
@@ -297,7 +297,14 @@
                     after.corrected - before.corrected,
                     after.failed - before.failed, pos);
         } else {
-            return 0;  // Success!
+            int i;
+            for (i = 0; i < size; ++i) {
+                if (data[i] != 0) {
+                    return 0;  // Success!
+                }
+            }
+            fprintf(stderr, "mtd: read all-zero block at 0x%08lx; skipping\n",
+                    pos);
         }
 
         pos += partition->erase_size;
@@ -326,6 +333,10 @@
             read += ctx->partition->erase_size;
         }
 
+        if (read >= len) {
+            return read;
+        }
+
         // Read the next block into the buffer
         if (ctx->consumed == ctx->partition->erase_size && read < (int) len) {
             if (read_block(ctx->partition, ctx->fd, ctx->buffer)) return -1;