// SetupDisplayStrings - decompiled from Platform.efi
unsigned __int64 __fastcall SetupDisplayStrings(CHAR16 *Buffer, __int64 a2, const CHAR16 *Buffer_2)
{
CHAR16 *Buffer_1; // rbx
const char *(Destination____((void__)_0)); // r8
__int64 n326; // rdx
UINTN n4; // rsi
CHAR16 v9; // ax
char *v10; // rdi
Buffer_1 = Buffer; /*0x5067*/
if ( ((unsigned __int8)Buffer & 1) != 0 ) /*0x506d*/
Assert( /*0x507e*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
320,
(__int64)"((UINTN) Destination & 0x00000001) == 0");
if ( ((unsigned __int8)Buffer_2 & 1) != 0 ) /*0x5087*/
Assert( /*0x5098*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
321,
(__int64)"((UINTN) Source & 0x00000001) == 0");
if ( !Buffer_1 ) /*0x50a2*/
{
(Destination____((void__)_0)) = "(Destination != ((void *) 0))"; /*0x50a4*/
n326 = 326; /*0x50ab*/
LABEL_7:
Assert((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", n326, (__int64)(Destination____((void__)_0))); /*0x50b0*/
return 0x8000000000000002uLL; /*0x50c2*/
}
if ( !Buffer_2 ) /*0x50ca*/
{
(Destination____((void__)_0)) = "(Source != ((void *) 0))"; /*0x50cc*/
n326 = 327; /*0x50d3*/
goto LABEL_7; /*0x50d8*/
}
n4 = StrLen(Buffer_2); /*0x50e7*/
if ( n4 > 4 ) /*0x50f2*/
n4 = 4; /*0x50f2*/
if ( Buffer_2 > Buffer_1 ) /*0x50f9*/
goto LABEL_15; /*0x50f9*/
if ( Buffer_1 >= &Buffer_2[n4 + 1] ) /*0x5106*/
{
if ( Buffer_1 > Buffer_2 ) /*0x510b*/
goto LABEL_18; /*0x510b*/
LABEL_15:
if ( Buffer_2 >= Buffer_1 + 5 ) /*0x5114*/
goto LABEL_17; /*0x5114*/
}
Assert( /*0x5116*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
356,
(__int64)"InternalSafeStringNoStrOverlap (Destination, DestMax, (CHAR16 *)Source, SourceLen + 1)");
LABEL_17:
if ( Buffer_2 > Buffer_1 ) /*0x512d*/
{
LABEL_20:
if ( Buffer_2 < Buffer_1 + 5 ) /*0x5148*/
return 0x800000000000000FuLL; /*0x5148*/
goto LABEL_22; /*0x5148*/
}
LABEL_18:
if ( Buffer_1 < &Buffer_2[n4 + 1] ) /*0x513a*/
return 0x800000000000000FuLL; /*0x5154*/
if ( Buffer_2 >= Buffer_1 ) /*0x513f*/
goto LABEL_20; /*0x513f*/
LABEL_22:
v9 = *Buffer_2; /*0x5156*/
if ( *Buffer_2 ) /*0x5156*/
{
v10 = (char *)((char *)Buffer_2 - (char *)Buffer_1); /*0x515e*/
do /*0x5177*/
{
if ( !n4 ) /*0x5164*/
break; /*0x5164*/
*Buffer_1 = v9; /*0x5166*/
--n4; /*0x5169*/
v9 = *(CHAR16 *)((char *)++Buffer_1 + (_QWORD)v10); /*0x5170*/
}
while ( v9 ); /*0x5177*/
}
*Buffer_1 = 0; /*0x5179*/
return 0; /*0x5192*/
}