101 lines
3.2 KiB
C
101 lines
3.2 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x140093f40 FUN_140093f40
|
|
* Pseudocode, not original source. */
|
|
|
|
undefined4
|
|
FUN_140093f40(longlong param_1,uint param_2,TypeDescriptor *param_3,TypeDescriptor *param_4)
|
|
|
|
{
|
|
uint uVar1;
|
|
uint uVar2;
|
|
undefined4 uVar3;
|
|
LPVOID pvVar4;
|
|
int *piVar5;
|
|
longlong *plVar6;
|
|
longlong *plVar7;
|
|
undefined8 **ppuVar8;
|
|
uint *puVar9;
|
|
longlong lVar10;
|
|
uint uVar11;
|
|
ulonglong uVar12;
|
|
TypeDescriptor *pTVar13;
|
|
longlong lVar14;
|
|
int iVar15;
|
|
uint *puVar16;
|
|
undefined8 *local_res8;
|
|
|
|
plVar7 = (longlong *)(param_1 + -0xa8);
|
|
pTVar13 = param_4;
|
|
piVar5 = (int *)(**(code **)(*plVar7 + 0x58))(plVar7);
|
|
FUN_14006b350(piVar5);
|
|
if (DAT_1401b42cf != '\0') {
|
|
(**(code **)(*plVar7 + 200))(plVar7,L"Proud::CNetServerImpl::GetMostSuitableSuperPeerInGroup");
|
|
}
|
|
uVar12 = (ulonglong)param_2;
|
|
ppuVar8 = &local_res8;
|
|
plVar6 = FUN_140093630((longlong)plVar7,(longlong *)ppuVar8,param_2);
|
|
if ((undefined8 *)*plVar6 == (undefined8 *)0x0) {
|
|
puVar16 = (uint *)0x0;
|
|
}
|
|
else {
|
|
puVar16 = *(uint **)*plVar6;
|
|
}
|
|
if ((local_res8 != (undefined8 *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0))
|
|
{
|
|
pvVar4 = (LPVOID)*local_res8;
|
|
if (pvVar4 != (LPVOID)0x0) {
|
|
FUN_1400807c0((longlong)pvVar4,ppuVar8,uVar12,pTVar13);
|
|
FUN_14006cc60(pvVar4);
|
|
}
|
|
FUN_14006cc60(local_res8);
|
|
}
|
|
if (puVar16 != (uint *)0x0) {
|
|
puVar9 = puVar16;
|
|
FUN_140088f60((longlong)plVar7,puVar16,param_3,pTVar13);
|
|
iVar15 = 0;
|
|
uVar1 = puVar16[0x1e];
|
|
lVar10 = 0;
|
|
if (0 < (int)uVar1) {
|
|
lVar14 = 0;
|
|
do {
|
|
if ((lVar10 < 0) || ((int)uVar1 <= iVar15)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(plVar7,puVar9,param_3,pTVar13);
|
|
}
|
|
param_3 = (TypeDescriptor *)0x0;
|
|
puVar9 = (uint *)0x0;
|
|
uVar2 = *(uint *)¶m_4[1].spare;
|
|
pTVar13 = (TypeDescriptor *)(ulonglong)uVar2;
|
|
if ((int)uVar2 < 1) {
|
|
LAB_14009409b:
|
|
if ((-1 < iVar15) && (iVar15 < (int)uVar1)) {
|
|
uVar3 = *(undefined4 *)((longlong)iVar15 * 0x40 + *(longlong *)(puVar16 + 0x1c));
|
|
FUN_14006b3e0((longlong)piVar5);
|
|
return uVar3;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(plVar7,puVar9,param_3,pTVar13);
|
|
}
|
|
while( true ) {
|
|
if (((longlong)puVar9 < 0) || ((int)uVar2 <= (int)param_3)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(plVar7,puVar9,param_3,pTVar13);
|
|
}
|
|
plVar7 = param_4[1].pVFTable;
|
|
if (*(int *)((longlong)plVar7 + (longlong)puVar9 * 4) ==
|
|
*(int *)(lVar14 + *(longlong *)(puVar16 + 0x1c))) break;
|
|
uVar11 = (int)param_3 + 1;
|
|
param_3 = (TypeDescriptor *)(ulonglong)uVar11;
|
|
puVar9 = (uint *)((longlong)puVar9 + 1);
|
|
if ((int)uVar2 <= (int)uVar11) goto LAB_14009409b;
|
|
}
|
|
iVar15 = iVar15 + 1;
|
|
lVar10 = lVar10 + 1;
|
|
lVar14 = lVar14 + 0x40;
|
|
} while (iVar15 < (int)uVar1);
|
|
}
|
|
}
|
|
FUN_14006b3e0((longlong)piVar5);
|
|
return 0;
|
|
}
|
|
|