PfxFindPrefix
_PREFIX_TABLE_ENTRY *__fastcall PfxFindPrefix(_PREFIX_TABLE *PrefixTable, _STRING *FullName){
PPREFIX_TABLE_ENTRY NextPrefixTree;
_PREFIX_TABLE *v3;
CSHORT v5;
_RTL_SPLAY_LINKS *i;
_PREFIX_TABLE_ENTRY *p_LeftChild;
_COMPARISON v8;
struct _PREFIX_TABLE_ENTRY *v10;
NextPrefixTree = PrefixTable->NextPrefixTree;
v3 = PrefixTable;
v5 = ComputeNameLength(FullName);
while( NextPrefixTree->NameLength > v5 )
{
v3 = (_PREFIX_TABLE *)NextPrefixTree;
NextPrefixTree = NextPrefixTree->NextPrefixTree;
}
LABEL_12:
if( NextPrefixTree->NameLength <= 0 )
return 0i64;
for( i = &NextPrefixTree->Links; ; i = i->RightChild )
{
while( 1 )
{
if( !i )
{
v3 = (_PREFIX_TABLE *)NextPrefixTree;
NextPrefixTree = NextPrefixTree->NextPrefixTree;
goto LABEL_12;
}
p_LeftChild = (_PREFIX_TABLE_ENTRY *)&i[-1].LeftChild;
v8 = CompareNamesCaseSensitive((_STRING *)i[1].Parent, FullName);
if( v8 != IsGreaterThan )
break;
i = i->LeftChild;
}
if( v8 )
break;
}
if( p_LeftChild->NodeTypeCode == 514 )
{
v10 = NextPrefixTree->NextPrefixTree;
NextPrefixTree->NextPrefixTree = 0i64;
NextPrefixTree->NodeTypeCode = 514;
p_LeftChild = (_PREFIX_TABLE_ENTRY *)&RtlSplay(i)[-1].LeftChild;
p_LeftChild->NodeTypeCode = 513;
v3->NextPrefixTree = p_LeftChild;
p_LeftChild->NextPrefixTree = v10;
}
return p_LeftChild;
}Referenced by:
No references.