]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - fs/fat/fat.c
FAT: remove cur_part_nr
[karo-tx-uboot.git] / fs / fat / fat.c
index 80156c815f8e392bc01809cbcc31b87ed3757e9a..731d3690c318d523aa216a4b0e4785e062886730 100644 (file)
@@ -46,7 +46,6 @@ static void downcase(char *str)
 }
 
 static block_dev_desc_t *cur_dev;
-static unsigned int cur_part_nr;
 static disk_partition_t cur_part_info;
 
 #define DOS_BOOT_MAGIC_OFFSET  0x1fe
@@ -77,10 +76,8 @@ int fat_register_device(block_dev_desc_t * dev_desc, int part_no)
      defined(CONFIG_SYSTEMACE) )
 
        /* Read the partition table, if present */
-       if (!get_partition_info(dev_desc, part_no, &cur_part_info)) {
+       if (!get_partition_info(dev_desc, part_no, &cur_part_info))
                cur_dev = dev_desc;
-               cur_part_nr = part_no;
-       }
 #endif
 
        /* Otherwise it might be a superfloppy (whole-disk FAT filesystem) */
@@ -92,7 +89,6 @@ int fat_register_device(block_dev_desc_t * dev_desc, int part_no)
                }
 
                cur_dev = dev_desc;
-               cur_part_nr = 1;
                cur_part_info.start = 0;
                cur_part_info.size = dev_desc->lba;
                cur_part_info.blksz = dev_desc->blksz;
@@ -567,15 +563,16 @@ get_vfatname(fsdata *mydata, int curclust, __u8 *cluster,
 }
 
 /* Calculate short name checksum */
-static __u8 mkcksum(const char *str)
+static __u8 mkcksum(const char name[8], const char ext[3])
 {
        int i;
 
        __u8 ret = 0;
 
-       for (i = 0; i < 11; i++) {
-               ret = (((ret & 1) << 7) | ((ret & 0xfe) >> 1)) + str[i];
-       }
+       for (i = 0; i < sizeof(name); i++)
+               ret = (((ret & 1) << 7) | ((ret & 0xfe) >> 1)) + name[i];
+       for (i = 0; i < sizeof(ext); i++)
+               ret = (((ret & 1) << 7) | ((ret & 0xfe) >> 1)) + ext[i];
 
        return ret;
 }
@@ -678,7 +675,8 @@ static dir_entry *get_dentfromdir(fsdata *mydata, int startsect,
                                return NULL;
                        }
 #ifdef CONFIG_SUPPORT_VFAT
-                       if (dols && mkcksum(dentptr->name) == prevcksum) {
+                       __u8 csum = mkcksum(dentptr->name, dentptr->ext);
+                       if (dols && csum == prevcksum) {
                                prevcksum = 0xffff;
                                dentptr++;
                                continue;
@@ -946,13 +944,16 @@ do_fat_read_at(const char *filename, unsigned long pos, void *buffer,
 
                for (i = 0; i < DIRENTSPERBLOCK; i++) {
                        char s_name[14], l_name[VFAT_MAXLEN_BYTES];
+                       __u8 csum;
 
                        l_name[0] = '\0';
                        if (dentptr->name[0] == DELETED_FLAG) {
                                dentptr++;
                                continue;
                        }
-                       if ((dentptr->attr & ATTR_VOLUME)) {
+
+                       csum = mkcksum(dentptr->name, dentptr->ext);
+                       if (dentptr->attr & ATTR_VOLUME) {
 #ifdef CONFIG_SUPPORT_VFAT
                                if ((dentptr->attr & ATTR_VFAT) == ATTR_VFAT &&
                                    (dentptr->name[0] & LAST_LONG_ENTRY_MASK)) {
@@ -1015,8 +1016,7 @@ do_fat_read_at(const char *filename, unsigned long pos, void *buffer,
                                goto exit;
                        }
 #ifdef CONFIG_SUPPORT_VFAT
-                       else if (dols == LS_ROOT &&
-                                mkcksum(dentptr->name) == prevcksum) {
+                       else if (dols == LS_ROOT && csum == prevcksum) {
                                prevcksum = 0xffff;
                                dentptr++;
                                continue;
@@ -1235,8 +1235,7 @@ int file_fat_detectfs(void)
        vol_label[11] = '\0';
        volinfo.fs_type[5] = '\0';
 
-       printf("Partition %d: Filesystem: %s \"%s\"\n", cur_part_nr,
-               volinfo.fs_type, vol_label);
+       printf("Filesystem: %s \"%s\"\n", volinfo.fs_type, vol_label);
 
        return 0;
 }