SdbpGetNextIndexedRecord

UINT64 __stdcall SdbpGetNextIndexedRecord(_DB *pdb, UINT64 tiIndex, _FIND_INFO *pFindInfo){
  unsigned int v4; 
  _DWORD *MappedTagData; 
  unsigned int TagDataSize; 
  __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned int NextTagId; 
  unsigned int v13; 
  UINT16 TagFromTagID; 
  UINT16 v15; 
  INT8 *v16; 
  UINT64 v17; 

  v4 = tiIndex;
  if( SdbGetTagFromTagID(pdb, tiIndex) != 0x9801 )
  {
    v16 = "The tag 0x%lx is not an index tag";
    v17 = 499i64;
LABEL_18:
    AslLogCallPrintf(1ui64, (INT8 *)"SdbpGetNextIndexedRecord", v17, v16);
    return 0i64;
  }
  MappedTagData = SdbpGetMappedTagData(pdb, v4);
  if( !MappedTagData )
  {
    v16 = (INT8 *)"Failed to get pointer to the index data tagid x%lx";
    v17 = 506i64;
    goto LABEL_18;
  }
  if( (pFindInfo[5] & 1) != 0 )
  {
    v13 = pFindInfo[1];
    if( !v13 )
      v13 = MappedTagData[3 * pFindInfo[4] + 2];
    NextTagId = SdbpGetNextTagId(pdb, v13);
    TagFromTagID = SdbGetTagFromTagID(pdb, v13);
    v15 = SdbGetTagFromTagID(pdb, NextTagId);
    if( v15 && (v15 & 0xF000) == 28672 && v15 == TagFromTagID && NextTagId != pFindInfo[2] )
    {
      pFindInfo[1] = NextTagId;
      return NextTagId;
    }
  }
  else
  {
    TagDataSize = SdbGetTagDataSize(pdb, v4);
    v8 = (unsigned int)pFindInfo[4];
    if( (_DWORD)v8 != TagDataSize / 0xC - 1 )
    {
      v9 = 3 * v8;
      v10 = (unsigned int)(v8 + 1);
      if( *(_QWORD *)&MappedTagData[v9] == *(_QWORD *)&MappedTagData[3 * v10] )
      {
        pFindInfo[4] = v10;
        return(unsigned int)MappedTagData[3 * v10 + 2];
      }
    }
  }
  return 0i64;
}

Referenced by:

SdbFindNextStringIndexedTag
SdbpFindMatchingName