summaryrefslogtreecommitdiffstats
path: root/include/fat.h
diff options
context:
space:
mode:
authorWu, Josh <Josh.wu@atmel.com>2014-05-08 16:14:06 +0800
committerTom Rini <trini@ti.com>2014-05-12 16:31:50 -0400
commit2e98f70882f8c1a09b662137884c1435a97c9a1c (patch)
tree43b50a0850bd03e6e051477f42cab39468d9add4 /include/fat.h
parent06118973ede291df8617c4089972cbf888bdc96b (diff)
downloadblackbird-obmc-uboot-2e98f70882f8c1a09b662137884c1435a97c9a1c.tar.gz
blackbird-obmc-uboot-2e98f70882f8c1a09b662137884c1435a97c9a1c.zip
fs: fat_write: fix the incorrect last cluster checking
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>
Diffstat (limited to 'include/fat.h')
-rw-r--r--include/fat.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/fat.h b/include/fat.h
index 65da733aef..81d9790420 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) : \
OpenPOWER on IntegriCloud