CcGetBcbListHeadLargeOffset
INT64 __fastcall CcGetBcbListHeadLargeOffset(INT64 a1, INT64 a2, CHAR a3){
__int64 v4;
__int64 v6;
int v7;
__int64 v8;
char v9;
char v10;
char v11;
INT64 v12;
__int64 v13;
__int128 v15[3];
__int64 v16;
int v17[8];
v4 = 0i64;
v16 = 0i64;
memset(v15, 0, sizeof(v15));
v6 = *(_QWORD *)(a1 + 88);
v7 = 0;
v8 = *(_QWORD *)(a1 + 32);
v9 = 25;
do
{
v10 = v9;
v9 += 7;
++v7;
}
while( v8 > 1i64 << v9 );
if( a2 >= 1i64 << v9 )
return a1 + 16;
while( 1 )
{
v11 = v10;
v12 = a2 >> v10;
--v7;
v13 = *(_QWORD *)(v6 + 8i64 * (unsigned int)(a2 >> v10));
if( !v13 )
break;
LABEL_5:
*((_QWORD *)v15 + v4) = v6;
v10 -= 7;
v17[v4] = v12;
a2 &= (1i64 << v11) - 1;
v4 = (unsigned int)(v4 + 1);
v6 = v13;
if( !v7 )
return v13 + 8 * (((a2 >> v10) & 0xFFFFFFFEi64) + 128);
}
while( 1 )
{
if( a3 )
{
if( (_DWORD)v12 != 127 )
{
do
{
if( (_DWORD)v12 == 127 )
break;
v12 = (unsigned int)(v12 + 1);
}
while( !*(_QWORD *)(v6 + 8 * v12) );
v13 = *(_QWORD *)(v6 + 8i64 * (unsigned int)v12);
if( v13 )
{
a2 = 0i64;
goto LABEL_5;
}
}
}
else if( (_DWORD)v12 )
{
do
{
if( !(_DWORD)v12 )
break;
v12 = (unsigned int)(v12 - 1);
}
while( !*(_QWORD *)(v6 + 8 * v12) );
v13 = *(_QWORD *)(v6 + 8i64 * (unsigned int)v12);
if( v13 )
{
a2 = 0x7FFFFFFFFFFFFFFFi64;
goto LABEL_5;
}
}
if( !(_DWORD)v4 )
return a1 + 16;
if( (unsigned int)v4 >= 7 )
return 0i64;
++v7;
v4 = (unsigned int)(v4 - 1);
LODWORD(v12) = v17[(unsigned int)v4];
v6 = *((_QWORD *)v15 + (unsigned int)v4);
}
}Referenced by:
CcFindBcb
CcPinFileData
CcSetVacbLargeOffset