Newer
Older
AMI-Aptio-BIOS-Reversed / PurleyRpPkg / Platform / Dxe / Setup / DxePlatform / Platform / GetAllHandlesByProtocol.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Restructure the repo
// GetAllHandlesByProtocol - decompiled from Platform.efi
void *GetAllHandlesByProtocol(char *x_UEFI_3, char a2, ...)
{
  char *x_UEFI; // rsi
  va_list v5; // r15
  UINTN n3; // rbp
  unsigned __int64 n3_1; // rbx
  char n59_1; // al
  char *x_UEFI_1; // rdi
  char n59; // al
  void *ZeroPool; // rax
  char *x_UEFI_2; // [rsp+70h] [rbp+18h] BYREF
  va_list va; // [rsp+70h] [rbp+18h]
  va_list va1; // [rsp+78h] [rbp+20h] BYREF

  va_start(va1, a2);
  va_start(va, a2);
  x_UEFI_2 = va_arg(va1, char *); /*0x7988*/
  if ( !x_UEFI_3 ) /*0x79ad*/
    Assert((__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c", 1528, (__int64)"SupportedLanguages != ((void *) 0)"); /*0x79c2*/
  x_UEFI = x_UEFI_2; /*0x79c7*/
  if ( x_UEFI_2 ) /*0x79cf*/
  {
    va_copy(v5, va); /*0x79d5*/
    do /*0x7a8e*/
    {
      n3 = 3; /*0x79dd*/
      if ( BoolToString(x_UEFI) <= 3 ) /*0x79ea*/
        n3_1 = BoolToString(x_UEFI); /*0x79f8*/
      else
        n3_1 = 3; /*0x79ec*/
      if ( a2 ) /*0x79fe*/
      {
LABEL_29:
        while ( n3_1 ) /*0x7a88*/
        {
          x_UEFI_1 = x_UEFI_3; /*0x7a21*/
          if ( *x_UEFI_3 ) /*0x7a1c*/
          {
            while ( 1 ) /*0x7a29*/
            {
              if ( a2 ) /*0x7a29*/
                goto LABEL_36; /*0x7a29*/
              while ( *x_UEFI_1 == 59 ) /*0x7a38*/
                ++x_UEFI_1; /*0x7a31*/
              n59 = *x_UEFI_1; /*0x7a3a*/
              n3 = 0; /*0x7a3c*/
              while ( n59 && n59 != 59 ) /*0x7a42*/
                n59 = x_UEFI_1[++n3]; /*0x7a47*/
              if ( n3_1 <= n3 ) /*0x7a51*/
              {
LABEL_36:
                if ( !LocateHiiSetupConfig(x_UEFI_1, x_UEFI, n3_1) ) /*0x7a5c*/
                  break; /*0x7a5c*/
              }
              x_UEFI_1 += n3; /*0x7a66*/
              if ( !*x_UEFI_1 ) /*0x7a69*/
                goto LABEL_25; /*0x7a6c*/
            }
            ZeroPool = AllocateZeroPool(n3 + 1); /*0x7aaf*/
            if ( ZeroPool ) /*0x7ab7*/
              return CopyMem(ZeroPool, x_UEFI_1, n3); /*0x7ac2*/
            return 0; /*0x7ab7*/
          }
LABEL_25:
          if ( a2 ) /*0x7a71*/
            break; /*0x7a71*/
          if ( !--n3_1 ) /*0x7a77*/
            break; /*0x7a77*/
          do /*0x7a83*/
          {
            if ( x_UEFI[n3_1] == 45 ) /*0x7a7d*/
              break; /*0x7a7d*/
            --n3_1; /*0x7a7f*/
          }
          while ( n3_1 ); /*0x7a83*/
        }
      }
      else
      {
        n59_1 = *x_UEFI; /*0x7a04*/
        n3_1 = 0; /*0x7a06*/
        if ( *x_UEFI ) /*0x7a04*/
        {
          do /*0x7a18*/
          {
            if ( n59_1 == 59 ) /*0x7a0e*/
              break; /*0x7a0e*/
            n59_1 = x_UEFI[++n3_1]; /*0x7a13*/
          }
          while ( n59_1 ); /*0x7a18*/
          goto LABEL_29; /*0x7a18*/
        }
      }
      x_UEFI = (char *)*++v5; /*0x7a8e*/
    }
    while ( *v5 ); /*0x7a8e*/
  }
  return 0; /*0x7a9c*/
}