uint16_t exfat_add_checksum(const void* entry, uint16_t sum);
le16_t exfat_calc_checksum(const struct exfat_entry_meta1* meta1,
const struct exfat_entry_meta2* meta2, const le16_t* name);
+uint32_t exfat_vbr_start_checksum(const void* block, size_t size);
+uint32_t exfat_vbr_add_checksum(const void* block, size_t size, uint32_t sum);
le16_t exfat_calc_name_hash(const struct exfat* ef, const le16_t* name);
void exfat_humanize_bytes(uint64_t value, struct exfat_human_bytes* hb);
void exfat_print_info(const struct exfat_super_block* sb,
return cpu_to_le16(checksum);
}
+uint32_t exfat_vbr_start_checksum(const void* block, size_t size)
+{
+ size_t i;
+ uint32_t sum = 0;
+
+ for (i = 0; i < size; i++)
+ /* skip volume_state and allocated_percent fields */
+ if (i != 0x6a && i != 0x6b && i != 0x70)
+ sum = ((sum << 31) | (sum >> 1)) + ((const uint8_t*) block)[i];
+ return sum;
+}
+
+uint32_t exfat_vbr_add_checksum(const void* block, size_t size, uint32_t sum)
+{
+ size_t i;
+
+ for (i = 0; i < size; i++)
+ sum = ((sum << 31) | (sum >> 1)) + ((const uint8_t*) block)[i];
+ return sum;
+}
+
+
le16_t exfat_calc_name_hash(const struct exfat* ef, const le16_t* name)
{
size_t i;
return 12 * BLOCK_SIZE(sb);
}
-static uint32_t vbr_start_checksum(const void* block, size_t size)
-{
- size_t i;
- uint32_t sum = 0;
-
- for (i = 0; i < size; i++)
- /* skip volume_state and allocated_percent fields */
- if (i != 0x6a && i != 0x6b && i != 0x70)
- sum = ((sum << 31) | (sum >> 1)) + ((const uint8_t*) block)[i];
- return sum;
-}
-
-static uint32_t vbr_add_checksum(const void* block, size_t size, uint32_t sum)
-{
- size_t i;
-
- for (i = 0; i < size; i++)
- sum = ((sum << 31) | (sum >> 1)) + ((const uint8_t*) block)[i];
- return sum;
-}
-
int vbr_write(off_t base, int fd)
{
uint32_t checksum;
if (write(fd, &sb, sizeof(struct exfat_super_block)) == -1)
return errno;
- checksum = vbr_start_checksum(&sb, sizeof(struct exfat_super_block));
+ checksum = exfat_vbr_start_checksum(&sb, sizeof(struct exfat_super_block));
memset(block, 0, BLOCK_SIZE(sb));
block[BLOCK_SIZE(sb) / sizeof(block[0]) - 1] = cpu_to_le32(0xaa550000);
{
if (write(fd, block, BLOCK_SIZE(sb)) == -1)
return errno;
- checksum = vbr_add_checksum(block, BLOCK_SIZE(sb), checksum);
+ checksum = exfat_vbr_add_checksum(block, BLOCK_SIZE(sb), checksum);
}
memset(block, 0, BLOCK_SIZE(sb));
if (write(fd, block, BLOCK_SIZE(sb)) == -1)
return errno;
- checksum = vbr_add_checksum(block, BLOCK_SIZE(sb), checksum);
+ checksum = exfat_vbr_add_checksum(block, BLOCK_SIZE(sb), checksum);
if (write(fd, block, BLOCK_SIZE(sb)) == -1)
return errno;
- checksum = vbr_add_checksum(block, BLOCK_SIZE(sb), checksum);
+ checksum = exfat_vbr_add_checksum(block, BLOCK_SIZE(sb), checksum);
for (i = 0; i < BLOCK_SIZE(sb) / sizeof(block[0]); i++)
block[i] = cpu_to_le32(checksum);