/* DxeIplFvExtractSection @ 0xffc156d7 size=0x11c */
int __cdecl DxeIplFvExtractSection(int a1, unsigned int a2, int *a3, unsigned int *a4)
{
unsigned int v4; // ecx
unsigned int v6; // edi
int n13; // ecx
int v8; // ecx
int v9; // ebp
int v10; // eax
int v11; // esi
int v12; // eax
int v13; // [esp-14h] [ebp-18h]
unsigned int v14; // [esp+0h] [ebp-4h] BYREF
v14 = v4; /*0xffc156d7*/
if ( *(_BYTE *)(a2 + 3) != 1 ) /*0xffc156e0*/
return -2147483646; /*0xffc156e8*/
if ( (*(_DWORD *)a2 & 0xFFFFFF) == 0xFFFFFF ) /*0xffc156f6*/
{
v6 = *(_DWORD *)(a2 + 8); /*0xffc156fe*/
n13 = 13; /*0xffc15703*/
LOBYTE(a2) = *(_BYTE *)(a2 + 12); /*0xffc15706*/
}
else
{
v6 = *(_DWORD *)(a2 + 4); /*0xffc1570c*/
LOBYTE(a2) = *(_BYTE *)(a2 + 8); /*0xffc15717*/
n13 = 9; /*0xffc1571b*/
}
if ( (_BYTE)a2 ) /*0xffc15729*/
{
if ( (unsigned __int8)a2 != 1 || (int)sub_FFC16D80(&v14, &a2) < 0 ) /*0xffc15745*/
return -2147483634; /*0xffc15745*/
v9 = sub_FFC1632D(v13, (a2 >> 12) + ((a2 & 0xFFF) != 0)); /*0xffc15764*/
if ( v9 ) /*0xffc15768*/
{
v6 = v14; /*0xffc1576a*/
v10 = sub_FFC1632D(v8, (v14 >> 12) + ((v14 & 0xFFF) != 0) + 1); /*0xffc1577e*/
if ( v10 ) /*0xffc15787*/
{
v11 = v10 + 4092; /*0xffc15789*/
if ( (int)sub_FFC16DAF(v9, 1) < 0 ) /*0xffc1579f*/
return -2147483634; /*0xffc157a6*/
goto LABEL_16; /*0xffc1579f*/
}
}
return -2147483639; /*0xffc157cc*/
}
v12 = sub_FFC1632D(n13, (v6 >> 12) + ((v6 & 0xFFF) != 0) + 1); /*0xffc157bc*/
if ( !v12 ) /*0xffc157c5*/
return -2147483639; /*0xffc157c5*/
v11 = v12 + 4092; /*0xffc157ce*/
sub_FFC162D3(v6); /*0xffc157d9*/
LABEL_16:
*a4 = v6; /*0xffc157df*/
*a3 = v11; /*0xffc157e9*/
return 0; /*0xffc156e8*/
}