David Cantrell <[EMAIL PROTECTED]> wrote:
> On Thu, 2007-02-15 at 17:52 +0100, Jim Meyering wrote:
>> There are several warnings about this:
>>
>>   table.c: In function '_test_code_bad':
>>   table.c:209: warning: enumeration value 'FAT_TYPE_FAT12' not handled in 
>> switch
>>
>> However, there are a few switch stmts that *do* handle that enum value.
>> Do any of you know how best to avoid those warnings?
>>
>>   - handle FAT_TYPE_FAT12 like FAT_TYPE_FAT16, as is done
>>     at least once in each of table.c and traverse.c.
>
> See doc/FAT for examples.

Thanks for the pointer.

I hope you'll understand if I don't learn everything
there is to know about FAT right away :-)

>>   - fall through (e.g., default: break, or FAT_TYPE_FAT12: break),
>>     which is equivalent to what the current code does, yet will
>>     avoid the warning.
>
> Don't do this.
>
>> Two examples:
...
> Add:
>
> case FAT_TYPE_FAT12:
> if (code == 0xff0) return 1;
> break;
>
...
> Add:
>
> case FAT_TYPE_FAT12:
> if (code >= 0xff7) return 1;
> break;

Done.  But it's looking like the switch-related changes
belong in a separate patch, since they're actually changing
the way things work.

I don't yet know enough to say whether we can put
FAT12 and FAT16 in the same case, e.g.,
                case FAT_TYPE_FAT12:
                case FAT_TYPE_FAT16:
but that may be better in some of the examples below:

FYI, there are 4 more in that same file (table.c).
Here's the first.  Currently I'm using PED_ASSERT:

        switch (ft->fat_type) {
+               case FAT_TYPE_FAT12:
+               PED_ASSERT (0, (void) 0);
+               break;

                case FAT_TYPE_FAT16:
                ((unsigned short *) ft->table) [cluster]
                        = PED_CPU_TO_LE16 (value);
                break;

                case FAT_TYPE_FAT32:
                ((unsigned int *) ft->table) [cluster]
                        = PED_CPU_TO_LE32 (value);
                break;
        }
        return 1;

and another in clearfat.c:

static int
_calc_fat_entry_offset (PedFileSystem* fs, FatCluster cluster)
{
        FatSpecific*    fs_info = FAT_SPECIFIC (fs);

        switch (fs_info->fat_type) {
+               case FAT_TYPE_FAT12:
+                       PED_ASSERT (0, (void) 0);
+                       break;

                case FAT_TYPE_FAT16:
                        return cluster * 2;

                case FAT_TYPE_FAT32:
                        return cluster * 4;
        }
        return 0;
}

And one in fat/resize.c:

static int
fat_construct_dir_tree (FatOpContext* ctx)
{
        FatSpecific*            new_fs_info = FAT_SPECIFIC (ctx->new_fs);
        FatSpecific*            old_fs_info = FAT_SPECIFIC (ctx->old_fs);

        if (new_fs_info->fat_type == old_fs_info->fat_type) {
                switch (old_fs_info->fat_type) {
+                       case FAT_TYPE_FAT12:
+                       PED_ASSERT (0, (void) 0);
+                       break;

                        case FAT_TYPE_FAT16:
                        return fat_construct_legacy_root (ctx);

                        case FAT_TYPE_FAT32:
                        return fat_construct_root (ctx);
                }

_______________________________________________
parted-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/parted-devel

Reply via email to