// HiiStringPacker - decompiled from Platform.efi
unsigned __int64 __fastcall HiiStringPacker(CHAR16 *ZeroPool, UINTN n0xF4240, const CHAR16 *GUID_)
{
CHAR16 *ZeroPool_1; // rbx
const char *(Destination____((void__)_0)); // r8
__int64 n241; // rdx
UINTN n0xF4240_1; // rax
UINTN n0xF4240_2; // rbp
CHAR16 v11; // ax
signed __int64 v12; // rdi
ZeroPool_1 = ZeroPool; /*0x4ed5*/
if ( ((unsigned __int8)ZeroPool & 1) != 0 ) /*0x4edb*/
Assert( /*0x4eec*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
235,
(__int64)"((UINTN) Destination & 0x00000001) == 0");
if ( ((unsigned __int8)GUID_ & 1) != 0 ) /*0x4ef5*/
Assert( /*0x4f06*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
236,
(__int64)"((UINTN) Source & 0x00000001) == 0");
if ( !ZeroPool_1 ) /*0x4f11*/
{
(Destination____((void__)_0)) = "(Destination != ((void *) 0))"; /*0x4f13*/
n241 = 241; /*0x4f1a*/
LABEL_7:
Assert((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", n241, (__int64)(Destination____((void__)_0))); /*0x4f1f*/
return 0x8000000000000002uLL; /*0x4f31*/
}
if ( !GUID_ ) /*0x4f39*/
{
(Destination____((void__)_0)) = "(Source != ((void *) 0))"; /*0x4f3b*/
n241 = 242; /*0x4f42*/
goto LABEL_7; /*0x4f47*/
}
if ( n0xF4240 > 0xF4240 ) /*0x4f50*/
{
(Destination____((void__)_0)) = "(DestMax <= (_gPcd_FixedAtBuild_PcdMaximumUnicodeStringLength))"; /*0x4f52*/
n241 = 248; /*0x4f59*/
goto LABEL_7; /*0x4f5e*/
}
if ( !n0xF4240 ) /*0x4f63*/
{
(Destination____((void__)_0)) = "(DestMax != 0)"; /*0x4f65*/
n241 = 254; /*0x4f6c*/
goto LABEL_7; /*0x4f71*/
}
n0xF4240_1 = StrLen(GUID_); /*0x4f79*/
n0xF4240_2 = n0xF4240_1; /*0x4f7e*/
if ( n0xF4240 <= n0xF4240_1 ) /*0x4f84*/
{
Assert((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 260, (__int64)"(DestMax > SourceLen)"); /*0x4f95*/
return 0x8000000000000005uLL; /*0x4fa4*/
}
if ( GUID_ > ZeroPool_1 ) /*0x4fac*/
goto LABEL_19; /*0x4fac*/
if ( ZeroPool_1 >= &GUID_[n0xF4240_1 + 1] ) /*0x4fb9*/
{
if ( ZeroPool_1 > GUID_ ) /*0x4fbe*/
goto LABEL_22; /*0x4fbe*/
LABEL_19:
if ( GUID_ >= &ZeroPool_1[n0xF4240] ) /*0x4fc7*/
goto LABEL_21; /*0x4fc7*/
}
Assert( /*0x4fc9*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
265,
(__int64)"InternalSafeStringNoStrOverlap (Destination, DestMax, (CHAR16 *)Source, SourceLen + 1)");
LABEL_21:
if ( GUID_ > ZeroPool_1 ) /*0x4fe0*/
{
LABEL_24:
if ( GUID_ < &ZeroPool_1[n0xF4240] ) /*0x4ffb*/
return 0x800000000000000FuLL; /*0x4ffb*/
goto LABEL_26; /*0x4ffb*/
}
LABEL_22:
if ( ZeroPool_1 < &GUID_[n0xF4240_2 + 1] ) /*0x4fed*/
return 0x800000000000000FuLL; /*0x5007*/
if ( GUID_ >= ZeroPool_1 ) /*0x4ff2*/
goto LABEL_24; /*0x4ff2*/
LABEL_26:
v11 = *GUID_; /*0x5009*/
if ( *GUID_ ) /*0x5009*/
{
v12 = (char *)GUID_ - (char *)ZeroPool_1; /*0x5011*/
do /*0x5022*/
{
*ZeroPool_1++ = v11; /*0x5014*/
v11 = *(CHAR16 *)((char *)ZeroPool_1 + v12); /*0x501b*/
}
while ( v11 ); /*0x5022*/
}
*ZeroPool_1 = 0; /*0x5024*/
return 0; /*0x5039*/
}