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.