fat: root directory cluster only makes sense for FAT32
authorSergei Shtylyov <sshtylyov@ru.mvista.com>
Fri, 19 Aug 2011 09:32:34 +0000 (09:32 +0000)
committerWolfgang Denk <wd@denx.de>
Sat, 1 Oct 2011 19:52:06 +0000 (21:52 +0200)
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>
fs/fat/fat.c

index d5aded420d535627e54002d2e18b5d89d31406bd..aa0be18b8f3c3b5671888bcf93c3502720c6642f 100644 (file)
@@ -788,7 +788,7 @@ do_fat_read (const char *filename, void *buffer, unsigned long maxsize,
        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 *buffer, unsigned long maxsize,
                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 *buffer, unsigned long maxsize,
                                                ((dir_slot *)dentptr)->alias_checksum;
 
                                        get_vfatname(mydata,
-                                                    (mydata->fatsize == 32) ?
-                                                    root_cluster :
-                                                    0,
+                                                    root_cluster,
                                                     do_fat_read_block,
                                                     dentptr, l_name);