diff options
Diffstat (limited to 'ubi-utils/new-utils/src')
| -rw-r--r-- | ubi-utils/new-utils/src/ubiformat.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/ubi-utils/new-utils/src/ubiformat.c b/ubi-utils/new-utils/src/ubiformat.c index 98f2d5f..dfae415 100644 --- a/ubi-utils/new-utils/src/ubiformat.c +++ b/ubi-utils/new-utils/src/ubiformat.c @@ -296,7 +296,7 @@ static int drop_ffs(const struct mtd_info *mtd, const void *buf, int len)  static int flash_image(const struct mtd_info *mtd, const struct ubigen_info *ui,  		       struct ubi_scan_info *si)  { -	int fd, img_ebs, eb, written_ebs = 0; +	int fd, img_ebs, eb, written_ebs = 0, divisor;  	struct stat st;  	if (stat(args.image, &st)) @@ -316,6 +316,7 @@ static int flash_image(const struct mtd_info *mtd, const struct ubigen_info *ui,  		return sys_errmsg("cannot open \"%s\"", args.image);  	verbose(args.verbose, "will write %d eraseblocks", img_ebs); +	divisor = img_ebs;  	for (eb = 0; eb < mtd->eb_cnt; eb++) {  		int err, new_len;  		char buf[mtd->eb_size]; @@ -323,12 +324,14 @@ static int flash_image(const struct mtd_info *mtd, const struct ubigen_info *ui,  		if (!args.quiet && !args.verbose) {  			printf("\r" PROGRAM_NAME ": flashing eraseblock %d -- %2lld %% complete  ", -			       eb, (long long)(eb + 1) * 100 / img_ebs); +			       eb, (long long)(eb + 1) * 100 / divisor);  			fflush(stdout);  		} -		if (si->ec[eb] == EB_BAD) +		if (si->ec[eb] == EB_BAD) { +			divisor += 1;  			continue; +		}  		if (args.verbose) {  			normsg_cont("eraseblock %d: erase", eb);  | 
