PfxInsertPrefix
UINT8 __stdcall PfxInsertPrefix(PREFIX_TABLE *PrefixTable, STRING *Prefix, PREFIX_TABLE_ENTRY *PrefixTableEntry){
CSHORT v6;
RTL_SPLAY_LINKS *p_Links;
PREFIX_TABLE *i;
PREFIX_TABLE *j;
int v11;
PPREFIX_TABLE_ENTRY NextPrefixTree;
RTL_SPLAY_LINKS *v13;
struct _PREFIX_TABLE_ENTRY *v14;
struct _PREFIX_TABLE_ENTRY *p_LeftChild;
v6 = ComputeNameLength(Prefix);
p_Links = &PrefixTableEntry->Links;
PrefixTableEntry->NameLength = v6;
PrefixTableEntry->Links.LeftChild = 0i64;
PrefixTableEntry->Links.RightChild = 0i64;
PrefixTableEntry->Prefix = Prefix;
PrefixTableEntry->Links.Parent = &PrefixTableEntry->Links;
for( i = (PREFIX_TABLE *)PrefixTable->NextPrefixTree; i->NameLength > v6; i = (PREFIX_TABLE *)i->NextPrefixTree )
PrefixTable = i;
if( i->NameLength == v6 )
{
for( j = i; ; j = (PREFIX_TABLE *)&NextPrefixTree[-1].Links.RightChild )
{
v11 = CompareNamesCaseSensitive((const STRING *)j[2].NextPrefixTree, Prefix);
if( v11 == 2 )
break;
if( v11 == 3 )
{
NextPrefixTree = j[1].NextPrefixTree;
if( !NextPrefixTree )
{
PrefixTableEntry->NextPrefixTree = 0i64;
v13 = (RTL_SPLAY_LINKS *)&j[1];
PrefixTableEntry->NodeTypeCode = 514;
j[1].NextPrefixTree = (PPREFIX_TABLE_ENTRY)p_Links;
LABEL_15:
p_Links->Parent = v13;
v14 = i->NextPrefixTree;
i->NextPrefixTree = 0i64;
i->NodeTypeCode = 514;
p_LeftChild = (struct _PREFIX_TABLE_ENTRY *)&RtlSplay(v13)[-1].LeftChild;
p_LeftChild->NodeTypeCode = 513;
PrefixTable->NextPrefixTree = p_LeftChild;
p_LeftChild->NextPrefixTree = v14;
return 1;
}
}
else
{
NextPrefixTree = *(PPREFIX_TABLE_ENTRY *)&j[2].NodeTypeCode;
if( !NextPrefixTree )
{
PrefixTableEntry->NextPrefixTree = 0i64;
v13 = (RTL_SPLAY_LINKS *)&j[1];
PrefixTableEntry->NodeTypeCode = 514;
*(_QWORD *)&j[2].NodeTypeCode = p_Links;
goto LABEL_15;
}
}
}
return 0;
}
else
{
PrefixTable->NextPrefixTree = PrefixTableEntry;
PrefixTableEntry->NodeTypeCode = 513;
PrefixTableEntry->NextPrefixTree = (struct _PREFIX_TABLE_ENTRY *)i;
return 1;
}
}Referenced by:
No references.