2008-02-11 12:10:35 +00:00
|
|
|
/*
|
|
|
|
* PROJECT: Mke2fs
|
|
|
|
* FILE: Group.c
|
|
|
|
* PROGRAMMER: Matt Wu <mattwu@163.com>
|
|
|
|
* HOMEPAGE: http://ext2.yeah.net
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* INCLUDES **************************************************************/
|
|
|
|
|
|
|
|
#include "Mke2fs.h"
|
|
|
|
|
|
|
|
/* DEFINITIONS ***********************************************************/
|
|
|
|
|
|
|
|
/* FUNCTIONS *************************************************************/
|
|
|
|
|
|
|
|
int test_root(int a, int b)
|
|
|
|
{
|
|
|
|
if (a == 0)
|
|
|
|
return 1;
|
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
if (a == 1)
|
|
|
|
return 1;
|
|
|
|
if (a % b)
|
|
|
|
return 0;
|
|
|
|
a = a / b;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool ext2_bg_has_super(PEXT2_SUPER_BLOCK pExt2Sb, int group_block)
|
|
|
|
{
|
|
|
|
if (!(pExt2Sb->s_feature_ro_compat & EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (test_root(group_block, 3) || (test_root(group_block, 5)) ||
|
|
|
|
test_root(group_block, 7))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool ext2_allocate_group_desc(PEXT2_FILESYS Ext2Sys)
|
|
|
|
{
|
|
|
|
ULONG size;
|
|
|
|
|
|
|
|
size = Ext2Sys->desc_blocks * Ext2Sys->blocksize;
|
|
|
|
|
|
|
|
Ext2Sys->group_desc =
|
2008-02-11 12:49:51 +00:00
|
|
|
(PEXT2_GROUP_DESC)RtlAllocateHeap(RtlGetProcessHeap(), 0, size);
|
2008-02-11 12:10:35 +00:00
|
|
|
|
|
|
|
if (Ext2Sys->group_desc)
|
|
|
|
{
|
|
|
|
memset(Ext2Sys->group_desc, 0, size);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void ext2_free_group_desc(PEXT2_FILESYS Ext2Sys)
|
|
|
|
{
|
|
|
|
if (Ext2Sys->group_desc)
|
|
|
|
{
|
2008-02-11 12:49:51 +00:00
|
|
|
RtlFreeHeap(RtlGetProcessHeap(), 0, Ext2Sys->group_desc);
|
2008-02-11 12:10:35 +00:00
|
|
|
Ext2Sys->group_desc = NULL;
|
|
|
|
}
|
|
|
|
}
|