RtlNextUnicodePrefix
_UNICODE_PREFIX_TABLE_ENTRY *__stdcall RtlNextUnicodePrefix(_UNICODE_PREFIX_TABLE *PrefixTable, UINT8 Restart){
PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
_RTL_SPLAY_LINKS *v5;
_RTL_SPLAY_LINKS *v6;
_UNICODE_PREFIX_TABLE_ENTRY *result;
RTL_SPLAY_LINKS *p_Links;
RTL_SPLAY_LINKS *Parent;
_RTL_SPLAY_LINKS *LeftChild;
_RTL_SPLAY_LINKS *v11;
if( !Restart && (LastNextEntry = PrefixTable->LastNextEntry) != 0i64 )
{
result = LastNextEntry->CaseMatch;
if( result->NodeTypeCode == 2051 )
goto LABEL_7;
v6 = RtlRealSuccessor(&result->Links);
if( v6 )
{
LABEL_6:
result = (_UNICODE_PREFIX_TABLE_ENTRY *)&v6[-1];
LABEL_7:
PrefixTable->LastNextEntry = result;
return result;
}
p_Links = &LastNextEntry->Links;
Parent = LastNextEntry->Links.Parent;
if( Parent != &LastNextEntry->Links )
{
do
{
p_Links = Parent;
Parent = Parent->Parent;
}
while( Parent != p_Links );
}
LeftChild = p_Links[-1].LeftChild;
if( SWORD1(LeftChild->Parent) > 0 )
{
v11 = LeftChild[1].LeftChild;
v6 = LeftChild + 1;
while( v11 )
{
v6 = v11;
v11 = v11->LeftChild;
}
goto LABEL_6;
}
}
else
{
NextPrefixTree = PrefixTable->NextPrefixTree;
if( NextPrefixTree->NodeTypeCode != 2048 )
{
v5 = NextPrefixTree->Links.LeftChild;
v6 = &NextPrefixTree->Links;
while( v5 )
{
v6 = v5;
v5 = v5->LeftChild;
}
goto LABEL_6;
}
}
return 0i64;
}Referenced by:
No references.