Author: blogic Date: 2014-12-02 20:28:23 +0100 (Tue, 02 Dec 2014) New Revision: 43503
Modified: trunk/package/system/mtd/src/mtd.c Log: mtd: make the mtd dump call run properly on nand flash Signed-off-by: John Crispin <[email protected]> Modified: trunk/package/system/mtd/src/mtd.c =================================================================== --- trunk/package/system/mtd/src/mtd.c 2014-12-02 19:26:45 UTC (rev 43502) +++ trunk/package/system/mtd/src/mtd.c 2014-12-02 19:28:23 UTC (rev 43503) @@ -276,8 +276,9 @@ static int mtd_dump(const char *mtd, int size) { - int ret = 0; + int ret = 0, offset = 0; int fd; + char *buf; if (quiet < 2) fprintf(stderr, "Dumping %s ...\n", mtd); @@ -288,9 +289,15 @@ return -1; } + if (!size) + size = mtdsize; + + buf = malloc(erasesize); + if (!buf) + return -1; + do { - char buf[256]; - int len = (size > sizeof(buf)) ? (sizeof(buf)) : (size); + int len = (size > erasesize) ? (erasesize) : (size); int rlen = read(fd, buf, len); if (rlen < 0) { @@ -299,9 +306,15 @@ ret = -1; goto out; } - if (!rlen) + if (!rlen || rlen != len) break; - write(1, buf, rlen); + if (mtd_block_is_bad(fd, offset)) { + fprintf(stderr, "skipping bad block at 0x%08x\n", offset); + } else { + size -= rlen; + write(1, buf, rlen); + } + offset += rlen; } while (size > 0); out: _______________________________________________ openwrt-commits mailing list [email protected] https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits
