diff mbox

[U-Boot,2/3] fs: fat_write: fix the incorrect last cluster checking

Message ID 1399536847-21719-3-git-send-email-josh.wu@atmel.com
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Josh Wu May 8, 2014, 8:14 a.m. UTC
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(-)

Comments

Tom Rini May 13, 2014, 1:54 a.m. UTC | #1
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 mbox

Patch

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) : \