Fix ext4-tool to get group descriptor size from super block 48/141148/2 accepted/tizen/4.0/unified/20170816.011536 accepted/tizen/4.0/unified/20170816.014751 accepted/tizen/4.0/unified/20170829.020049 accepted/tizen/unified/20170801.054823 submit/tizen/20170730.224646 submit/tizen_4.0/20170811.094300 submit/tizen_4.0/20170814.115522 submit/tizen_4.0/20170828.100004 submit/tizen_4.0/20170828.110004 submit/tizen_4.0_unified/20170814.115522
authorSungbae Yoo <sungbae.yoo@samsung.com>
Fri, 28 Jul 2017 08:49:27 +0000 (17:49 +0900)
committerSungbae Yoo <sungbae.yoo@samsung.com>
Mon, 31 Jul 2017 05:36:20 +0000 (05:36 +0000)
Signed-off-by: Sungbae Yoo <sungbae.yoo@samsung.com>
Change-Id: I401458c899da23bf5ffb52dc8c6a275d4cc6d896

server/ext4-tool.cpp

index 1564dc6..a70a1c6 100644 (file)
@@ -102,6 +102,7 @@ void Ext4Tool::readInfo()
        unsigned int firstDataBlock = 0;
        unsigned int blocksPerGroup = 0;
        unsigned int clustersPerGroup = 0;
+       unsigned short descSize = 0;
        runtime::File device(source);
 
        if (!device.exists())
@@ -130,11 +131,18 @@ void Ext4Tool::readInfo()
        device.lseek(ODE_SUPERBLOCK_OFFSET + 36, SEEK_SET);
        device.read(&clustersPerGroup, 4);
 
+       // read descSize
+       device.lseek(ODE_SUPERBLOCK_OFFSET + 0xFE, SEEK_SET);
+       device.read(&descSize, 2);
+       if (descSize < ODE_EXT2_MIN_DESC_SIZE) {
+               descSize = ODE_EXT2_MIN_DESC_SIZE;
+       }
+
        unsigned int groupDescCount = divCeilSafely(totalBlockCount - firstDataBlock, blocksPerGroup);
        int blockNbytes = clustersPerGroup / 8;
 
        // read group_desc
-       unsigned int descPerBlock = blockSize / ODE_EXT2_MIN_DESC_SIZE;
+       unsigned int descPerBlock = blockSize / descSize;
        unsigned int descBlockCount = divCeilSafely(groupDescCount, descPerBlock);
 
        // read first meta block
@@ -161,7 +169,7 @@ void Ext4Tool::readInfo()
        }
 
        for (unsigned int i = 0; i < groupDescCount; i++) {
-               unsigned int blk = (((struct odeExtGroupDesc *)(((unsigned char *)(group_desc.data())) + i * ODE_EXT2_MIN_DESC_SIZE))->blockBitmap);
+               unsigned int blk = (((struct odeExtGroupDesc *)(((unsigned char *)(group_desc.data())) + i * descSize))->blockBitmap);
 
                try {
                        data block_bitmap(blockSize);