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.