exfat_error("exFAT file system is not found");
return -EIO;
}
- if (ef->sb->version.major != 1 || ef->sb->version.minor != 0)
+ ef->zero_cluster = malloc(CLUSTER_SIZE(*ef->sb));
+ if (ef->zero_cluster == NULL)
{
exfat_close(ef->dev);
- exfat_error("unsupported exFAT version: %hhu.%hhu",
- ef->sb->version.major, ef->sb->version.minor);
free(ef->sb);
- return -EIO;
+ exfat_error("failed to allocate zero sector");
+ return -ENOMEM;
}
- if (ef->sb->fat_count != 1)
+ /* use zero_cluster as a temporary buffer for VBR checksum verification */
+ if (verify_vbr_checksum(ef->dev, ef->zero_cluster,
+ SECTOR_SIZE(*ef->sb)) != 0)
{
+ free(ef->zero_cluster);
exfat_close(ef->dev);
- exfat_error("unsupported FAT count: %hhu", ef->sb->fat_count);
free(ef->sb);
return -EIO;
}
- /* officially exFAT supports cluster size up to 32 MB */
- if ((int) ef->sb->sector_bits + (int) ef->sb->spc_bits > 25)
+ memset(ef->zero_cluster, 0, CLUSTER_SIZE(*ef->sb));
+ if (ef->sb->version.major != 1 || ef->sb->version.minor != 0)
{
+ free(ef->zero_cluster);
exfat_close(ef->dev);
- exfat_error("too big cluster size: 2^%d",
- (int) ef->sb->sector_bits + (int) ef->sb->spc_bits);
+ exfat_error("unsupported exFAT version: %hhu.%hhu",
+ ef->sb->version.major, ef->sb->version.minor);
free(ef->sb);
return -EIO;
}
-
- ef->zero_cluster = malloc(CLUSTER_SIZE(*ef->sb));
- if (ef->zero_cluster == NULL)
+ if (ef->sb->fat_count != 1)
{
+ free(ef->zero_cluster);
exfat_close(ef->dev);
+ exfat_error("unsupported FAT count: %hhu", ef->sb->fat_count);
free(ef->sb);
- exfat_error("failed to allocate zero sector");
- return -ENOMEM;
+ return -EIO;
}
- /* use zero_cluster as a temporary buffer for VBR checksum verification */
- if (verify_vbr_checksum(ef->dev, ef->zero_cluster,
- SECTOR_SIZE(*ef->sb)) != 0)
+ /* officially exFAT supports cluster size up to 32 MB */
+ if ((int) ef->sb->sector_bits + (int) ef->sb->spc_bits > 25)
{
free(ef->zero_cluster);
exfat_close(ef->dev);
+ exfat_error("too big cluster size: 2^%d",
+ (int) ef->sb->sector_bits + (int) ef->sb->spc_bits);
free(ef->sb);
return -EIO;
}
- memset(ef->zero_cluster, 0, CLUSTER_SIZE(*ef->sb));
ef->root = malloc(sizeof(struct exfat_node));
if (ef->root == NULL)