/* DxeIplGetNextFfsFile @ 0xffc158a3 size=0x110 */
int __thiscall DxeIplGetNextFfsFile(void *this)
{
int i_1; // esi
int v2; // edi
int v3; // eax
int v4; // eax
int i; // ecx
int v6; // ecx
int v7; // eax
_BYTE v9[2]; // [esp+10h] [ebp-18h] BYREF
int v10; // [esp+12h] [ebp-16h]
int v11; // [esp+18h] [ebp-10h] BYREF
_BYTE *v12; // [esp+1Ch] [ebp-Ch] BYREF
_BYTE v13[6]; // [esp+20h] [ebp-8h] BYREF
i_1 = 0; /*0xffc158b8*/
v2 = sub_FFC16226(this, &v12); /*0xffc158bf*/
if ( v2 >= 0 ) /*0xffc158ca*/
{
*(_DWORD *)v13 = v9; /*0xffc158e3*/
__sidt(v9); /*0xffc158e9*/
v2 = (*(int (__cdecl **)(_DWORD, _BYTE *))v12)(*(_DWORD *)(v10 - 4), v12); /*0xffc158fa*/
}
else
{
sub_FFC16F4A(-2147483646, 50532358); /*0xffc158d6*/
}
if ( v2 >= 0 /*0xffc1591d*/
&& (v3 = sub_FFC16008(), (v4 = sub_FFC16056(&unk_FFC18CB8, v3)) != 0)
&& !*(_BYTE *)(v4 + 32)
&& *(_QWORD *)(v4 + 24) )
{
sub_FFC16085(); /*0xffc15925*/
for ( i = 0; sub_FFC16254(i, &v11) >= 0; i = i_1 ) /*0xffc1592a*/
++i_1; /*0xffc1592e*/
}
else
{
v12 = v9; /*0xffc15942*/
__sidt(v9); /*0xffc15948*/
v6 = *(_DWORD *)(v10 - 4); /*0xffc1594e*/
v12 = v13; /*0xffc15954*/
__sidt(v13); /*0xffc1595a*/
(*(void (__cdecl **)(int, int, int, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(*(_DWORD *)&v13[2] - 4) + 88))( /*0xffc1596f*/
v6,
-2147483646,
50532359,
0,
0,
0);
v7 = sub_FFC16386(); /*0xffc15972*/
if ( (*(unsigned __int8 (__cdecl **)(int))(v7 + 24))(9) ) /*0xffc15979*/
{
v12 = v9; /*0xffc15986*/
__sidt(v9); /*0xffc1598c*/
(*(void (__cdecl **)(int, _DWORD, _DWORD, _DWORD))(**(_DWORD **)(v10 - 4) + 128))(2, 0, 0, 0); /*0xffc1599c*/
sub_FFC15FB3(); /*0xffc159a5*/
}
}
return i_1; /*0xffc159aa*/
}