OSDN Git Service

Fixed potential garbage at the end of clusters bitmap.
authorresver@gmail.com <resver@gmail.com@60bc1c72-a15a-11de-b98f-4500b42dc123>
Wed, 7 May 2014 19:22:56 +0000 (19:22 +0000)
committerresver@gmail.com <resver@gmail.com@60bc1c72-a15a-11de-b98f-4500b42dc123>
Wed, 7 May 2014 19:22:56 +0000 (19:22 +0000)
git-svn-id: http://exfat.googlecode.com/svn/trunk@400 60bc1c72-a15a-11de-b98f-4500b42dc123

mkfs/cbm.c

index 865ce90..c4a2afd 100644 (file)
@@ -21,6 +21,7 @@
 */
 
 #include <limits.h>
+#include <string.h>
 #include "cbm.h"
 #include "fat.h"
 #include "uct.h"
@@ -45,20 +46,20 @@ static int cbm_write(struct exfat_dev* dev)
                        DIV_ROUND_UP(uct.get_size(), get_cluster_size()) +
                        DIV_ROUND_UP(rootdir.get_size(), get_cluster_size());
        size_t bitmap_size = DIV_ROUND_UP(allocated_clusters, CHAR_BIT);
-       uint8_t* bitmap = malloc(bitmap_size);
+       bitmap_t* bitmap = malloc(BMAP_SIZE(bitmap_size));
        size_t i;
 
        if (bitmap == NULL)
        {
-               exfat_error("failed to allocate bitmap of %zu bytes", bitmap_size);
+               exfat_error("failed to allocate bitmap of %zu bytes",
+                               BMAP_SIZE(bitmap_size));
                return 1;
        }
+       memset(bitmap, 0, BMAP_SIZE(bitmap_size));
 
        for (i = 0; i < bitmap_size * CHAR_BIT; i++)
                if (i < allocated_clusters)
                        BMAP_SET(bitmap, i);
-               else
-                       BMAP_CLR(bitmap, i);
        if (exfat_write(dev, bitmap, bitmap_size) < 0)
        {
                exfat_error("failed to write bitmap of %zu bytes", bitmap_size);