SdbpGetNextIndexedRecord
__int64 __fastcall SdbpGetNextIndexedRecord(__int64 a1, UINT64 a2, _DWORD *a3){
unsigned int v4;
INT64 MappedTagData;
unsigned int TagDataSize;
__int64 v8;
__int64 v9;
__int64 v10;
unsigned int NextTagId;
unsigned int v13;
__int16 TagFromTagID;
__int16 v15;
const CHAR *v16;
UINT64 v17;
v4 = a2;
if( (unsigned __int16)SdbGetTagFromTagID(a1, a2) != 0x9801 )
{
v16 = "The tag 0x%lx is not an index tag";
v17 = 499i64;
LABEL_18:
AslLogCallPrintf(1ui64, "SdbpGetNextIndexedRecord", v17, v16, v4);
return 0i64;
}
MappedTagData = SdbpGetMappedTagData(a1, v4);
if( !MappedTagData )
{
v16 = "Failed to get pointer to the index data tagid x%lx";
v17 = 506i64;
goto LABEL_18;
}
if( (a3[5] & 1) != 0 )
{
v13 = a3[1];
if( !v13 )
v13 = *(_DWORD *)(MappedTagData + 12i64 * (unsigned int)a3[4] + 8);
NextTagId = SdbpGetNextTagId(a1, v13);
TagFromTagID = SdbGetTagFromTagID(a1, v13);
v15 = SdbGetTagFromTagID(a1, NextTagId);
if( v15 && (v15 & 0xF000) == 28672 && v15 == TagFromTagID && NextTagId != a3[2] )
{
a3[1] = NextTagId;
return NextTagId;
}
}
else
{
TagDataSize = SdbGetTagDataSize(a1, v4);
v8 = (unsigned int)a3[4];
if( (_DWORD)v8 != TagDataSize / 0xC - 1 )
{
v9 = 3 * v8;
v10 = (unsigned int)(v8 + 1);
if( *(_QWORD *)(MappedTagData + 4 * v9) == *(_QWORD *)(MappedTagData + 12 * v10) )
{
a3[4] = v10;
return *(unsigned int *)(MappedTagData + 12 * v10 + 8);
}
}
}
return 0i64;
}Referenced by:
SdbFindNextStringIndexedTag
SdbpFindMatchingName