Message ID | 1399536847-21719-3-git-send-email-josh.wu@atmel.com |
---|---|
State | Accepted |
Delegated to: | Tom Rini |
Headers | show |
On Thu, May 08, 2014 at 04:14:06PM +0800, Wu, Josh wrote: > In fat_write.c, the last clust condition check is incorrect: > > if ((curclust >= 0xffffff8) || (curclust >= 0xfff8)) { > ... ... > } > > For example, in FAT32 if curclust is 0x11000. It is a valid clust. > But on above condition check, it will be think as a last clust. > > So the correct last clust check should be: > in fat32, curclust >= 0xffffff8 > in fat16, curclust >= 0xfff8 > in fat12, curclust >= 0xff8 > > This patch correct the last clust check. > > Signed-off-by: Josh Wu <josh.wu@atmel.com> Applied to u-boot/master, thanks!
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 9f5e911..623d11c 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -882,7 +882,7 @@ static dir_entry *find_directory_entry(fsdata *mydata, int startsect, } curclust = get_fatent_value(mydata, dir_curclust); - if ((curclust >= 0xffffff8) || (curclust >= 0xfff8)) { + if (IS_LAST_CLUST(curclust, mydata->fatsize)) { empty_dentptr = dentptr; return NULL; } diff --git a/include/fat.h b/include/fat.h index 65da733..81d9790 100644 --- a/include/fat.h +++ b/include/fat.h @@ -84,6 +84,9 @@ #define START(dent) (FAT2CPU16((dent)->start) \ + (mydata->fatsize != 32 ? 0 : \ (FAT2CPU16((dent)->starthi) << 16))) +#define IS_LAST_CLUST(x, fatsize) ((x) >= ((fatsize) != 32 ? \ + ((fatsize) != 16 ? 0xff8 : 0xfff8) : \ + 0xffffff8)) #define CHECK_CLUST(x, fatsize) ((x) <= 1 || \ (x) >= ((fatsize) != 32 ? \ ((fatsize) != 16 ? 0xff0 : 0xfff0) : \
In fat_write.c, the last clust condition check is incorrect: if ((curclust >= 0xffffff8) || (curclust >= 0xfff8)) { ... ... } For example, in FAT32 if curclust is 0x11000. It is a valid clust. But on above condition check, it will be think as a last clust. So the correct last clust check should be: in fat32, curclust >= 0xffffff8 in fat16, curclust >= 0xfff8 in fat12, curclust >= 0xff8 This patch correct the last clust check. Signed-off-by: Josh Wu <josh.wu@atmel.com> --- fs/fat/fat_write.c | 2 +- include/fat.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-)