server-re/decomp/DBCServer_Release_x64/full/functions/0x14018bf70.c

300 lines
9 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x14018bf70 FUN_14018bf70
* Pseudocode, not original source. */
/* WARNING: Removing unreachable block (ram,0x00014018c44b) */
/* WARNING: Removing unreachable block (ram,0x00014018c452) */
/* WARNING: Removing unreachable block (ram,0x00014018c460) */
/* WARNING: Removing unreachable block (ram,0x00014018c46d) */
/* WARNING: Removing unreachable block (ram,0x00014018c465) */
/* WARNING: Removing unreachable block (ram,0x00014018c473) */
/* WARNING: Removing unreachable block (ram,0x00014018c485) */
/* WARNING: Removing unreachable block (ram,0x00014018c0ea) */
undefined8 FUN_14018bf70(longlong param_1,uint param_2,int *param_3)
{
longlong lVar1;
undefined8 *puVar2;
ulonglong uVar3;
uint uVar4;
int iVar5;
undefined8 uVar6;
longlong *plVar7;
longlong *plVar8;
undefined8 *puVar9;
longlong *plVar10;
longlong *plVar11;
uint uVar12;
longlong lVar13;
uint *puVar14;
longlong *plVar15;
longlong *plVar16;
longlong *plVar17;
longlong *plVar18;
double dVar19;
double dVar20;
double dVar21;
longlong *local_res8;
undefined **local_90;
longlong *local_88;
longlong *local_80;
ulonglong local_78;
int local_70;
undefined4 local_6c;
longlong *local_68;
longlong lStack_60;
longlong *local_58;
longlong lStack_50;
undefined8 local_48;
local_48 = 0xfffffffffffffffe;
uVar6 = (**(code **)(*(longlong *)(param_1 + -0xa8) + 0x58))(param_1 + -0xa8);
FUN_14016db50(uVar6);
if (DAT_14034c86f != '\0') {
(**(code **)(*(longlong *)(param_1 + -0xa8) + 200))(param_1 + -0xa8);
}
uVar3 = (ulonglong)param_2 % (ulonglong)*(uint *)(param_1 + 0xbf8);
if ((*(longlong *)(param_1 + 0xbd8) != 0) &&
(puVar14 = *(uint **)(*(longlong *)(param_1 + 0xbd8) + uVar3 * 8), puVar14 != (uint *)0x0)) {
while ((uint)uVar3 == puVar14[8] % *(uint *)(param_1 + 0xbf8)) {
if (*puVar14 == param_2) {
lVar1 = *(longlong *)(puVar14 + 2);
if ((lVar1 != 0) && (*(longlong *)(lVar1 + 0x228) == 0)) {
plVar8 = (longlong *)0x0;
param_3[0] = 0;
param_3[1] = 0;
param_3[3] = *(int *)(lVar1 + 0x1d0);
param_3[2] = *(int *)(lVar1 + 0x1d4);
plVar7 = plVar8;
if (*(longlong *)(lVar1 + 0x6c0) != 0) {
plVar7 = *(longlong **)(lVar1 + 0x6b0);
}
for (; plVar7 != (longlong *)0x0; plVar7 = (longlong *)plVar7[2]) {
plVar15 = plVar8;
if ((undefined8 *)*plVar7 != (undefined8 *)0x0) {
plVar15 = *(longlong **)*plVar7;
}
if ((char)plVar15[0x22] != '\0') {
*param_3 = *param_3 + 1;
plVar15 = plVar8;
if ((undefined8 *)*plVar7 != (undefined8 *)0x0) {
plVar15 = *(longlong **)*plVar7;
}
if ((char)plVar15[1] == '\0') {
param_3[1] = param_3[1] + 1;
}
}
}
FUN_14016dbe0(uVar6);
return 1;
}
break;
}
puVar14 = *(uint **)(puVar14 + 4);
if (puVar14 == (uint *)0x0) break;
}
}
plVar8 = (longlong *)FUN_14018bc80(param_1 + -0xa8,&local_res8,param_2);
plVar15 = (longlong *)0x0;
plVar7 = plVar15;
if ((undefined8 *)*plVar8 != (undefined8 *)0x0) {
plVar7 = *(longlong **)*plVar8;
}
if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0)) {
lVar1 = *local_res8;
if (lVar1 != 0) {
FUN_140178e60(lVar1);
FUN_14016d970(lVar1);
}
FUN_14016d970(local_res8);
}
if (plVar7 == (longlong *)0x0) {
FUN_14016dbe0(uVar6);
uVar6 = 0;
}
else {
param_3[0] = 0;
param_3[1] = 0;
param_3[2] = 0;
param_3[3] = 0;
local_90 = Proud::CFastArray<Proud::P2PConnectionState*___ptr64,0>::vftable;
local_88 = (longlong *)0x0;
local_6c = 0;
local_80 = (longlong *)0x0;
local_78 = 0;
lVar1 = plVar7[5];
dVar19 = (double)lVar1;
if (lVar1 < 0) {
dVar19 = dVar19 + 1.8446744073709552e+19;
}
uVar4 = 2;
uVar12 = 2;
dVar20 = 1.0;
dVar21 = 1.0;
while( true ) {
if ((uVar12 & 1) != 0) {
dVar21 = dVar21 * dVar19;
}
uVar12 = uVar12 >> 1;
if (uVar12 == 0) break;
dVar19 = dVar19 * dVar19;
}
if (1.0 < dVar21 * 0.5) {
dVar19 = (double)lVar1;
if (lVar1 < 0) {
dVar19 = dVar19 + 1.8446744073709552e+19;
}
while( true ) {
if ((uVar4 & 1) != 0) {
dVar20 = dVar20 * dVar19;
}
uVar4 = uVar4 >> 1;
if (uVar4 == 0) break;
dVar19 = dVar19 * dVar19;
}
dVar20 = dVar20 * 0.5;
}
local_70 = 0;
if (0 < (int)dVar20) {
local_70 = (int)dVar20;
}
plVar8 = plVar15;
plVar10 = plVar15;
plVar17 = plVar15;
if (lVar1 != 0) {
plVar8 = (longlong *)plVar7[3];
plVar10 = (longlong *)0x0;
}
for (; plVar8 != (longlong *)0x0; plVar8 = (longlong *)plVar8[3]) {
iVar5 = (*(code *)**(undefined8 **)plVar8[2])();
if (((iVar5 != 1) && (lVar1 = plVar8[2], lVar1 != 0)) && (lVar1 != 0x40)) {
param_3[3] = param_3[3] + *(int *)(lVar1 + 400);
param_3[2] = param_3[2] + *(int *)(lVar1 + 0x194);
lVar13 = lVar1 + 0x660;
plVar18 = plVar15;
local_68 = plVar15;
lStack_60 = lVar13;
local_58 = plVar15;
lStack_50 = lVar13;
if (*(longlong *)(lVar1 + 0x680) != 0) {
plVar18 = *(longlong **)(lVar1 + 0x670);
local_68 = plVar18;
local_58 = plVar18;
}
LAB_14018c2c0:
if (plVar18 != (longlong *)0x0) {
puVar2 = (undefined8 *)*plVar18;
plVar11 = plVar15;
if (puVar2 != (undefined8 *)0x0) {
plVar11 = (longlong *)*puVar2;
}
uVar12 = *(uint *)(plVar7 + 6);
uVar3 = (ulonglong)*(uint *)(plVar11[0x20] + 0x6f8) % (ulonglong)uVar12;
lVar1 = plVar7[2];
if ((lVar1 != 0) && (puVar14 = *(uint **)(lVar1 + uVar3 * 8), puVar14 != (uint *)0x0)) {
while ((uint)uVar3 == puVar14[10] % uVar12) {
if (*puVar14 == *(uint *)(plVar11[0x20] + 0x6f8)) {
if (puVar14 != (uint *)0x0) {
plVar11 = plVar15;
if (puVar2 != (undefined8 *)0x0) {
plVar11 = (longlong *)*puVar2;
}
uVar3 = (ulonglong)*(uint *)(plVar11[0x21] + 0x6f8) % (ulonglong)uVar12;
puVar14 = *(uint **)(lVar1 + uVar3 * 8);
if (puVar14 != (uint *)0x0) goto LAB_14018c374;
}
break;
}
puVar14 = *(uint **)(puVar14 + 6);
if (puVar14 == (uint *)0x0) break;
}
}
goto LAB_14018c4a4;
}
if (lStack_50 != lVar13) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
}
}
if (plVar17 != (longlong *)0x0) {
if (local_88 == (longlong *)0x0) {
FUN_14016d970(plVar17);
}
else {
(**(code **)(*local_88 + 0x18))(local_88,plVar17);
}
}
FUN_14016dbe0(uVar6);
uVar6 = 1;
}
return uVar6;
while( true ) {
if (*puVar14 == *(uint *)(plVar11[0x21] + 0x6f8)) {
if (puVar14 != (uint *)0x0) {
plVar11 = plVar15;
if (puVar2 != (undefined8 *)0x0) {
plVar11 = (longlong *)*puVar2;
}
iVar5 = (int)plVar10;
if (iVar5 < 1) goto LAB_14018c3db;
puVar9 = (undefined8 *)FUN_14016ab80(&local_90);
plVar16 = plVar15;
goto LAB_14018c3c0;
}
break;
}
puVar14 = *(uint **)(puVar14 + 6);
if (puVar14 == (uint *)0x0) break;
LAB_14018c374:
if ((uint)uVar3 != puVar14[10] % uVar12) break;
}
goto LAB_14018c4a4;
while( true ) {
uVar12 = (int)plVar16 + 1;
plVar16 = (longlong *)(ulonglong)uVar12;
puVar9 = puVar9 + 1;
if (iVar5 <= (int)uVar12) break;
LAB_14018c3c0:
if (plVar11 == (longlong *)*puVar9) {
if ((int)plVar16 != -1) goto LAB_14018c4a4;
break;
}
}
LAB_14018c3db:
plVar10 = plVar15;
if (puVar2 != (undefined8 *)0x0) {
plVar10 = (longlong *)*puVar2;
}
if ((char)plVar10[0x22] != '\0') {
*param_3 = *param_3 + 1;
plVar10 = plVar15;
if ((undefined8 *)*plVar18 != (undefined8 *)0x0) {
plVar10 = *(longlong **)*plVar18;
}
if ((char)plVar10[1] == '\0') {
param_3[1] = param_3[1] + 1;
}
}
plVar17 = plVar15;
if ((longlong *)*plVar18 != (longlong *)0x0) {
plVar17 = *(longlong **)*plVar18;
}
if (iVar5 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
FUN_14016add0(&local_90);
plVar10 = (longlong *)(local_78 & 0xffffffff);
plVar11 = local_80;
if ((int)local_78 == 0) {
plVar11 = plVar15;
}
plVar11[iVar5] = (longlong)plVar17;
plVar17 = local_80;
LAB_14018c4a4:
plVar18 = (longlong *)plVar18[2];
goto LAB_14018c2c0;
}