From db2f047c802c4e49e152b6864cb130e49e8d9074 Mon Sep 17 00:00:00 2001 From: Rod Whitby Date: Wed, 6 Dec 2006 12:11:15 +1030 Subject: [PATCH] --- yaml --- r: 45685 b: refs/heads/master c: f33665d931f33a0baf44fc5d3594b23f8118eb44 h: refs/heads/master i: 45683: f46a16c4ec4fb21ff4ae121b8dddf545f99b37f5 v: v3 --- [refs] | 2 +- trunk/drivers/mtd/redboot.c | 23 ++++++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index b4ad1a4c5943..9647704d0701 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dd11b8cdf0c455f4cfbc5daa70aabce9dcc6c07b +refs/heads/master: f33665d931f33a0baf44fc5d3594b23f8118eb44 diff --git a/trunk/drivers/mtd/redboot.c b/trunk/drivers/mtd/redboot.c index b5259215f6d7..035cd9b0cc08 100644 --- a/trunk/drivers/mtd/redboot.c +++ b/trunk/drivers/mtd/redboot.c @@ -96,7 +96,19 @@ static int parse_redboot_partitions(struct mtd_info *master, */ if (swab32(buf[i].size) == master->erasesize) { int j; - for (j = 0; j < numslots && buf[j].name[0] != 0xff; ++j) { + for (j = 0; j < numslots; ++j) { + + /* A single 0xff denotes a deleted entry. + * Two of them in a row is the end of the table. + */ + if (buf[j].name[0] == 0xff) { + if (buf[j].name[1] == 0xff) { + break; + } else { + continue; + } + } + /* The unsigned long fields were written with the * wrong byte sex, name and pad have no byte sex. */ @@ -126,8 +138,13 @@ static int parse_redboot_partitions(struct mtd_info *master, for (i = 0; i < numslots; i++) { struct fis_list *new_fl, **prev; - if (buf[i].name[0] == 0xff) - continue; + if (buf[i].name[0] == 0xff) { + if (buf[i].name[1] == 0xff) { + break; + } else { + continue; + } + } if (!redboot_checksum(&buf[i])) break;