
The root directory cluster field only exists in a FAT32 boot sector, so the 'root_cluster' variable in do_fat_read() contains garbage in case of FAT12/16. Make it contain 0 instead as this is what is passed to get_vfatname() in that case anyway.
Signed-off-by: Sergei Shtylyov sshtylyov@mvista.com
--- Slight optimization atop of commit 3831530dcb7b71329c272ccd6181f8038b6a6dd0 (VFAT: fix processing of scattered long file name entries).
The patch was generated atop of the below patches posted earlier: http://marc.info/?l=u-boot&m=131283284822789 http://marc.info/?l=u-boot&m=131283289722891
fs/fat/fat.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-)
Index: u-boot/fs/fat/fat.c =================================================================== --- u-boot.orig/fs/fat/fat.c +++ u-boot/fs/fat/fat.c @@ -788,7 +788,7 @@ do_fat_read (const char *filename, void int files = 0, dirs = 0; long ret = -1; int firsttime; - __u32 root_cluster; + __u32 root_cluster = 0; int rootdir_size = 0; int j;
@@ -797,12 +797,12 @@ do_fat_read (const char *filename, void return -1; }
- root_cluster = bs.root_cluster; - - if (mydata->fatsize == 32) + if (mydata->fatsize == 32) { + root_cluster = bs.root_cluster; mydata->fatlength = bs.fat32_length; - else + } else { mydata->fatlength = bs.fat_length; + }
mydata->fat_sect = bs.reserved;
@@ -904,9 +904,7 @@ do_fat_read (const char *filename, void ((dir_slot *)dentptr)->alias_checksum;
get_vfatname(mydata, - (mydata->fatsize == 32) ? - root_cluster : - 0, + root_cluster, do_fat_read_block, dentptr, l_name);