mtd: make the mtd dump call run properly on nand flash
Signed-off-by: John Crispin <blogic@openwrt.org> SVN-Revision: 43503
This commit is contained in:
parent
5331a85501
commit
ff02ea36e0
1 changed files with 18 additions and 5 deletions
|
@ -276,8 +276,9 @@ mtd_erase(const char *mtd)
|
|||
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 @@ mtd_dump(const char *mtd, int size)
|
|||
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 @@ mtd_dump(const char *mtd, int size)
|
|||
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:
|
||||
|
|
Loading…
Reference in a new issue