Wednesday, April 27, 2011

(Commit 925) Macros

1. I have introduced two macros: FAT_IS_FAT12 and FAT_IS_FAT16 for determining type of FAT and macros for calculating cluster bad and last value based on FAT type.
uspace/srv/fs/fat/fat_fat.h
 
#define FAT_IS_FAT12(bs)        (CC(bs) < FAT12_CLST_MAX)
#define FAT_IS_FAT16(bs) \
    ((CC(bs) >= FAT12_CLST_MAX) && (CC(bs) < FAT16_CLST_MAX))
#define FAT_CLST_LAST1(bs) \
    (FAT_IS_FAT12(bs) ? FAT12_CLST_LAST1 : FAT16_CLST_LAST1)
#define FAT_CLST_LAST8(bs) \
    (FAT_IS_FAT12(bs) ? FAT12_CLST_LAST8 : FAT16_CLST_LAST8)
#define FAT_CLST_BAD(bs) \
    (FAT_IS_FAT12(bs) ? FAT12_CLST_BAD : FAT16_CLST_BAD)
Max clusters count for FAT12
 
#define FAT12_CLST_MAX    4085
Max clusters count for FAT16
 
#define FAT16_CLST_MAX    65525

2. I used new macros while mounting first to check type of FAT:
uspace/srv/fs/fat/fat_ops.c
 
        /* Determining type of FAT  */
        if (FAT_IS_FAT12(bs)) {
                printf("Found FAT12 filesystem\n");
        } else if (FAT_IS_FAT16(bs)) {
                printf("Found FAT16 filesystem\n");
        } else {
                printf("FAT32 filesystem is not supported by FAT server.\n");
                block_fini(devmap_handle);
                async_answer_0(rid, ENOTSUP);
                return;
        }

3. Of course I have changed in fat_fat.c all FATTYPE(bs) == 12 to FAT_IS_FAT12(bs)

4. I try going to use FAT_IS_FAT12 instead of FAT_IS_FAT16 because it require only one calculation for clusters count.

5. I insert additional variables like clst_last1 or clst_bad to store FAT depended values when its necessary.
 
fat_cluster_t clst_last1 = FAT_CLST_LAST1(bs);
fat_cluster_t clst_bad = FAT_CLST_BAD(bs);

No comments:

Post a Comment