BgpFoDestroy

void **__fastcall BgpFoDestroy(__int64 a1){
  void **result; 
  __int64 *v3; 
  _QWORD **v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  __int64 v7; 
  __int64 **v8; 
  __int64 *v9; 
  void *retaddr; 
  result = &retaddr;
  if( FontLibraryInitialized )
  {
    v3 = (__int64 *)FopFontFileListHead;
    while( v3 != &FopFontFileListHead )
    {
      if( a1 && v3[2] != a1 )
      {
        v3 = (__int64 *)*v3;
      }
      else
      {
        v4 = (_QWORD **)(v3 + 5);
        while( 1 )
        {
          v5 = *v4;
          if( *v4 == v4 )
            break;
          if( (_QWORD **)v5[1] != v4 )
            goto LABEL_16;
          v6 = (_QWORD *)*v5;
          if( *(_QWORD **)(*v5 + 8i64) != v5 )
            goto LABEL_16;
          *v4 = v6;
          v6[1] = v4;
          FopFreeFontData(v5);
        }
        v7 = *v3;
        if( *(__int64 **)(*v3 + 8) != v3 || (v8 = (__int64 **)v3[1], *v8 != v3) )
LABEL_16:
          __fastfail(3u);
        *v8 = (__int64 *)v7;
        v9 = v3;
        *(_QWORD *)(v7 + 8) = v8;
        v3 = (__int64 *)*v3;
        result = (void **)BgpFwFreeMemory(v9);
      }
    }
  }
  return result;
}

Referenced by:

BgpFwLibraryDestroy
BgpFwLibraryDisable