OSDN Git Service

Moved VBR checksum calculation functions to libexfat.
authorresver <resver@60bc1c72-a15a-11de-b98f-4500b42dc123>
Wed, 29 Dec 2010 20:51:15 +0000 (20:51 +0000)
committerresver <resver@60bc1c72-a15a-11de-b98f-4500b42dc123>
Wed, 29 Dec 2010 20:51:15 +0000 (20:51 +0000)
git-svn-id: http://exfat.googlecode.com/svn/trunk@183 60bc1c72-a15a-11de-b98f-4500b42dc123

libexfat/exfat.h
libexfat/utils.c
mkfs/vbr.c

index 2407c60..5481917 100644 (file)
@@ -152,6 +152,8 @@ uint16_t exfat_start_checksum(const struct exfat_entry_meta1* entry);
 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,
index 332dc76..a929356 100644 (file)
@@ -211,6 +211,28 @@ le16_t exfat_calc_checksum(const struct exfat_entry_meta1* meta1,
        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;
index 81f45c5..f53e5f2 100644 (file)
@@ -33,27 +33,6 @@ off_t vbr_size(void)
        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;
@@ -65,7 +44,7 @@ int vbr_write(off_t base, int fd)
 
        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);
@@ -73,16 +52,16 @@ int vbr_write(off_t base, int fd)
        {
                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);