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

136 lines
4.3 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401a8d60 FUN_1401a8d60
* Pseudocode, not original source. */
void FUN_1401a8d60(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)
{
undefined8 *puVar1;
void *pvVar2;
longlong *plVar3;
undefined8 uVar4;
undefined8 uVar5;
int iVar6;
longlong lVar7;
undefined8 uVar8;
uVar8 = 0xfffffffffffffffe;
uVar4 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))();
uVar5 = uVar4;
FUN_14016db50(uVar4);
if (DAT_14034c86f != '\0') {
lVar7 = **(longlong **)(param_1 + 0x148);
(**(code **)(lVar7 + 200))
(*(longlong **)(param_1 + 0x148),L"Proud::CNetThreads_S::~CNetThreads_S",lVar7,param_4
,uVar8,uVar5,1);
}
*(undefined1 *)(param_1 + 0x140) = 1;
FUN_14016dbe0(uVar4);
uVar5 = 0;
if (*(undefined8 **)(param_1 + 0x88) != (undefined8 *)0x0) {
uVar5 = **(undefined8 **)(param_1 + 0x88);
}
FUN_140199740(uVar5);
if (*(undefined8 **)(param_1 + 0x90) == (undefined8 *)0x0) {
uVar5 = 0;
}
else {
uVar5 = **(undefined8 **)(param_1 + 0x90);
}
FUN_140199740(uVar5);
FUN_14016db50(param_1);
iVar6 = 0;
lVar7 = 0;
if (0 < *(int *)(param_1 + 0x78)) {
do {
if ((lVar7 < 0) || (*(int *)(param_1 + 0x78) <= iVar6)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
puVar1 = *(undefined8 **)(*(longlong *)(param_1 + 0x70) + lVar7 * 8);
uVar5 = 0;
if (puVar1 != (undefined8 *)0x0) {
uVar5 = *puVar1;
}
FUN_140199740(uVar5);
iVar6 = iVar6 + 1;
lVar7 = lVar7 + 1;
} while (iVar6 < *(int *)(param_1 + 0x78));
}
FUN_14016dbe0(param_1);
iVar6 = 0;
lVar7 = 0;
if (0 < *(int *)(param_1 + 0x50)) {
do {
if ((lVar7 < 0) || (*(int *)(param_1 + 0x50) <= iVar6)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
puVar1 = *(undefined8 **)(*(longlong *)(param_1 + 0x48) + lVar7 * 8);
uVar5 = 0;
if (puVar1 != (undefined8 *)0x0) {
uVar5 = *puVar1;
}
FUN_140199740(uVar5);
iVar6 = iVar6 + 1;
lVar7 = lVar7 + 1;
} while (iVar6 < *(int *)(param_1 + 0x50));
}
CloseHandle(*(HANDLE *)(param_1 + 0x180));
FUN_1401a3e90(param_1 + 0x168);
FUN_140199830(param_1 + 0x158);
FUN_1401c38c0(param_1 + 0x150);
if ((*(longlong *)(param_1 + 0x90) != 0) &&
(*(longlong *)(*(longlong *)(param_1 + 0x90) + 8) =
*(longlong *)(*(longlong *)(param_1 + 0x90) + 8) + -1,
*(longlong *)(*(longlong *)(param_1 + 0x90) + 8) == 0)) {
puVar1 = *(undefined8 **)(param_1 + 0x90);
pvVar2 = (void *)*puVar1;
if (pvVar2 != (void *)0x0) {
FUN_1401997c0(pvVar2);
operator_delete(pvVar2);
}
FUN_14016d970(puVar1);
}
if ((*(longlong *)(param_1 + 0x88) != 0) &&
(*(longlong *)(*(longlong *)(param_1 + 0x88) + 8) =
*(longlong *)(*(longlong *)(param_1 + 0x88) + 8) + -1,
*(longlong *)(*(longlong *)(param_1 + 0x88) + 8) == 0)) {
puVar1 = *(undefined8 **)(param_1 + 0x88);
pvVar2 = (void *)*puVar1;
if (pvVar2 != (void *)0x0) {
FUN_1401997c0(pvVar2);
operator_delete(pvVar2);
}
FUN_14016d970(puVar1);
}
*(undefined ***)(param_1 + 0x60) = Proud::CFastArray<Proud::RefCount<Proud::Thread>,0>::vftable;
if (0 < *(int *)(param_1 + 0x78)) {
FUN_1401a7f40(*(undefined8 *)(param_1 + 0x70),(longlong)*(int *)(param_1 + 0x78));
}
if (*(longlong *)(param_1 + 0x70) != 0) {
plVar3 = *(longlong **)(param_1 + 0x68);
if (plVar3 == (longlong *)0x0) {
FUN_14016d970();
}
else {
(**(code **)(*plVar3 + 0x18))(plVar3,*(longlong *)(param_1 + 0x70));
}
}
*(undefined ***)(param_1 + 0x38) = Proud::CFastArray<Proud::RefCount<Proud::Thread>,0>::vftable;
if (0 < *(int *)(param_1 + 0x50)) {
FUN_1401a7f40(*(undefined8 *)(param_1 + 0x48),(longlong)*(int *)(param_1 + 0x50));
}
if (*(longlong *)(param_1 + 0x48) != 0) {
plVar3 = *(longlong **)(param_1 + 0x40);
if (plVar3 == (longlong *)0x0) {
FUN_14016d970();
}
else {
(**(code **)(*plVar3 + 0x18))(plVar3,*(longlong *)(param_1 + 0x48));
}
}
FUN_14016dc00(param_1);
return;
}