Fix wrong bitmap space size calculation 36/111736/3
authorSeok Hong <seok85.hong@samsung.com>
Mon, 23 Jan 2017 23:49:14 +0000 (08:49 +0900)
committerSeok Hong <seok85.hong@samsung.com>
Tue, 24 Jan 2017 07:56:58 +0000 (16:56 +0900)
Change-Id: I4e971bb251697a08fea79b58b780214912ea02b9
Signed-off-by: Seok Hong <seok85.hong@samsung.com>
server/ext4-tool.cpp

index 783c084c197b4eebd4bcc8babd64d930f552ead6..d31948353c25003b7c8520b6f7f43cf05f8f1873 100644 (file)
@@ -76,9 +76,6 @@ Ext4Tool::Ext4Tool(const std::string &src) :
        device.lseek(ODE_SUPERBLOCK_OFFSET + 36, SEEK_SET);
        device.read(&clustersPerGroup, 4);
 
-       // read bitmap
-       bitmap.resize(totalBlockCount + 1);
-
        unsigned int groupDescCount = divCeilSafely(totalBlockCount - firstDataBlock, blocksPerGroup);
        int blockNbytes = clustersPerGroup / 8;
 
@@ -100,6 +97,15 @@ Ext4Tool::Ext4Tool(const std::string &src) :
                /* skip other member */
        };
 
+       // read bitmap
+       {
+               unsigned int start = firstDataBlock;
+               unsigned int real_end = blocksPerGroup * groupDescCount - 1 + start;
+               size_t size = (size_t) (((real_end - start) / 8) + 1);
+               size = (size + 7) & ~3;
+               bitmap.resize(size);
+       }
+
        for (unsigned int i = 0; i < groupDescCount; i++) {
                data block_bitmap(blockSize);