301 lines
8.5 KiB
C
301 lines
8.5 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401acc80 FUN_1401acc80
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1401acc80(longlong param_1,int param_2,int param_3)
|
|
|
|
{
|
|
longlong *plVar1;
|
|
uint uVar2;
|
|
longlong *plVar3;
|
|
void *pvVar4;
|
|
longlong lVar5;
|
|
longlong lVar6;
|
|
longlong lVar7;
|
|
longlong lVar8;
|
|
undefined8 uVar9;
|
|
undefined8 *puVar10;
|
|
int iVar11;
|
|
int iVar12;
|
|
int iVar13;
|
|
longlong lVar14;
|
|
int local_res18;
|
|
longlong *local_88;
|
|
longlong *local_80;
|
|
longlong *local_78;
|
|
longlong *local_70;
|
|
undefined8 local_68;
|
|
longlong local_60;
|
|
undefined1 local_58;
|
|
|
|
local_68 = 0xfffffffffffffffe;
|
|
uVar2 = *(uint *)(*(longlong *)(param_1 + 0x148) + 600);
|
|
if (uVar2 != 0) {
|
|
FUN_1401c59a0(param_1 + 0x1e8,(double)uVar2 * 0.001);
|
|
}
|
|
pvVar4 = operator_new(0x28);
|
|
if (pvVar4 == (void *)0x0) {
|
|
lVar5 = 0;
|
|
}
|
|
else {
|
|
lVar5 = FUN_1401996b0(pvVar4,FUN_1401aadd0,param_1);
|
|
}
|
|
if (lVar5 == 0) {
|
|
local_80 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
local_80 = (longlong *)FUN_14016d940(0x10);
|
|
local_80[1] = 1;
|
|
*local_80 = lVar5;
|
|
}
|
|
plVar1 = local_80;
|
|
FUN_1401a4b40(param_1 + 0x88,&local_80);
|
|
plVar3 = local_80;
|
|
if (plVar1 != (longlong *)0x0) {
|
|
plVar1 = plVar1 + 1;
|
|
*plVar1 = *plVar1 + -1;
|
|
if (*plVar1 == 0) {
|
|
pvVar4 = (void *)*local_80;
|
|
if (pvVar4 != (void *)0x0) {
|
|
FUN_1401997c0(pvVar4);
|
|
operator_delete(pvVar4);
|
|
}
|
|
FUN_14016d970(plVar3);
|
|
}
|
|
}
|
|
pvVar4 = operator_new(0x28);
|
|
if (pvVar4 == (void *)0x0) {
|
|
lVar5 = 0;
|
|
}
|
|
else {
|
|
lVar5 = FUN_1401996b0(pvVar4,FUN_1401a61b0,param_1);
|
|
}
|
|
if (lVar5 == 0) {
|
|
local_78 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
local_78 = (longlong *)FUN_14016d940(0x10);
|
|
local_78[1] = 1;
|
|
*local_78 = lVar5;
|
|
}
|
|
plVar1 = local_78;
|
|
FUN_1401a4b40(param_1 + 0x90,&local_78);
|
|
plVar3 = local_78;
|
|
if (plVar1 != (longlong *)0x0) {
|
|
plVar1 = plVar1 + 1;
|
|
*plVar1 = *plVar1 + -1;
|
|
if (*plVar1 == 0) {
|
|
pvVar4 = (void *)*local_78;
|
|
if (pvVar4 != (void *)0x0) {
|
|
FUN_1401997c0(pvVar4);
|
|
operator_delete(pvVar4);
|
|
}
|
|
FUN_14016d970(plVar3);
|
|
}
|
|
}
|
|
iVar13 = 0;
|
|
if (0 < param_3) {
|
|
lVar5 = param_1 + 0x38;
|
|
do {
|
|
local_70 = operator_new(0x28);
|
|
if (local_70 == (longlong *)0x0) {
|
|
lVar6 = 0;
|
|
}
|
|
else {
|
|
lVar6 = FUN_1401996b0(local_70,FUN_1401acc50,param_1);
|
|
}
|
|
if (lVar6 == 0) {
|
|
local_70 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
local_70 = (longlong *)FUN_14016d940(0x10);
|
|
local_70[1] = 1;
|
|
*local_70 = lVar6;
|
|
}
|
|
plVar1 = local_70;
|
|
iVar11 = *(int *)(param_1 + 0x50);
|
|
if (iVar11 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
iVar12 = *(int *)(param_1 + 0x50);
|
|
FUN_1401a8910(lVar5,iVar12 + 1);
|
|
iVar12 = iVar12 - iVar11;
|
|
if ((0 < iVar12) && (iVar12 = iVar12 + -1, -1 < iVar12)) {
|
|
lVar6 = (longlong)(iVar12 + iVar11 + 1) << 3;
|
|
lVar14 = (longlong)(iVar12 + iVar11) << 3;
|
|
do {
|
|
lVar7 = FUN_14016ab80(lVar5);
|
|
lVar8 = FUN_14016ab80(lVar5);
|
|
FUN_1401a4b40(lVar6 + lVar8,lVar14 + lVar7);
|
|
lVar14 = lVar14 + -8;
|
|
lVar6 = lVar6 + -8;
|
|
iVar12 = iVar12 + -1;
|
|
} while (-1 < iVar12);
|
|
}
|
|
lVar6 = FUN_14016ab80(lVar5);
|
|
FUN_1401a4b40(lVar6 + (longlong)iVar11 * 8,&local_70);
|
|
plVar3 = local_70;
|
|
if (plVar1 != (longlong *)0x0) {
|
|
plVar1 = plVar1 + 1;
|
|
*plVar1 = *plVar1 + -1;
|
|
if (*plVar1 == 0) {
|
|
pvVar4 = (void *)*local_70;
|
|
if (pvVar4 != (void *)0x0) {
|
|
FUN_1401997c0(pvVar4);
|
|
operator_delete(pvVar4);
|
|
}
|
|
FUN_14016d970(plVar3);
|
|
}
|
|
}
|
|
iVar13 = iVar13 + 1;
|
|
} while (iVar13 < param_3);
|
|
}
|
|
local_60 = param_1;
|
|
FUN_14016db50(param_1);
|
|
local_58 = 1;
|
|
local_res18 = 0;
|
|
if (0 < param_2) {
|
|
do {
|
|
pvVar4 = operator_new(0x28);
|
|
if (pvVar4 == (void *)0x0) {
|
|
lVar5 = 0;
|
|
}
|
|
else {
|
|
lVar5 = FUN_1401996b0(pvVar4,FUN_1401aae00,param_1);
|
|
}
|
|
if (lVar5 == 0) {
|
|
local_88 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
local_88 = (longlong *)FUN_14016d940(0x10);
|
|
local_88[1] = 1;
|
|
*local_88 = lVar5;
|
|
}
|
|
iVar13 = *(int *)(param_1 + 0x78);
|
|
lVar5 = (longlong)iVar13;
|
|
if (iVar13 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
iVar11 = *(int *)(param_1 + 0x78);
|
|
FUN_1401a8910(param_1 + 0x60,iVar11 + 1);
|
|
iVar11 = iVar11 - iVar13;
|
|
if ((0 < iVar11) && (iVar11 = iVar11 + -1, lVar6 = (longlong)iVar11, -1 < iVar11)) {
|
|
lVar14 = (lVar6 + lVar5) * 8 + 8;
|
|
do {
|
|
lVar8 = FUN_14016ab80(param_1 + 0x60);
|
|
lVar7 = FUN_14016ab80(param_1 + 0x60);
|
|
plVar1 = (longlong *)(lVar14 + lVar7);
|
|
lVar7 = *(longlong *)(lVar8 + -8 + lVar14);
|
|
if (lVar7 != *plVar1) {
|
|
if (lVar7 != 0) {
|
|
*(longlong *)(*(longlong *)(lVar8 + -8 + lVar14) + 8) = *(longlong *)(lVar7 + 8) + 1;
|
|
}
|
|
puVar10 = (undefined8 *)0x0;
|
|
if ((*plVar1 != 0) &&
|
|
(*(longlong *)(*plVar1 + 8) = *(longlong *)(*plVar1 + 8) + -1,
|
|
*(longlong *)(*plVar1 + 8) == 0)) {
|
|
puVar10 = (undefined8 *)*plVar1;
|
|
}
|
|
*plVar1 = *(longlong *)(lVar8 + -8 + lVar14);
|
|
if (puVar10 != (undefined8 *)0x0) {
|
|
pvVar4 = (void *)*puVar10;
|
|
if (pvVar4 != (void *)0x0) {
|
|
FUN_1401997c0(pvVar4);
|
|
operator_delete(pvVar4);
|
|
}
|
|
FUN_14016d970(puVar10);
|
|
}
|
|
}
|
|
lVar14 = lVar14 + -8;
|
|
lVar6 = lVar6 + -1;
|
|
} while (-1 < lVar6);
|
|
}
|
|
lVar6 = FUN_14016ab80(param_1 + 0x60);
|
|
if (local_88 != *(longlong **)(lVar6 + lVar5 * 8)) {
|
|
if (local_88 != (longlong *)0x0) {
|
|
local_88[1] = local_88[1] + 1;
|
|
}
|
|
puVar10 = (undefined8 *)0x0;
|
|
lVar14 = *(longlong *)(lVar6 + lVar5 * 8);
|
|
if ((lVar14 != 0) &&
|
|
(*(longlong *)(*(longlong *)(lVar6 + lVar5 * 8) + 8) = *(longlong *)(lVar14 + 8) + -1,
|
|
*(longlong *)(*(longlong *)(lVar6 + lVar5 * 8) + 8) == 0)) {
|
|
puVar10 = *(undefined8 **)(lVar6 + lVar5 * 8);
|
|
}
|
|
*(longlong **)(lVar6 + lVar5 * 8) = local_88;
|
|
if (puVar10 != (undefined8 *)0x0) {
|
|
pvVar4 = (void *)*puVar10;
|
|
if (pvVar4 != (void *)0x0) {
|
|
FUN_1401997c0(pvVar4);
|
|
operator_delete(pvVar4);
|
|
}
|
|
FUN_14016d970(puVar10);
|
|
}
|
|
}
|
|
if (local_88 != (longlong *)0x0) {
|
|
plVar1 = local_88 + 1;
|
|
*plVar1 = *plVar1 + -1;
|
|
if (*plVar1 == 0) {
|
|
pvVar4 = (void *)*local_88;
|
|
if (pvVar4 != (void *)0x0) {
|
|
FUN_1401997c0(pvVar4);
|
|
operator_delete(pvVar4);
|
|
}
|
|
FUN_14016d970(local_88);
|
|
}
|
|
}
|
|
local_res18 = local_res18 + 1;
|
|
} while (local_res18 < param_2);
|
|
}
|
|
FUN_14016dbe0(param_1);
|
|
uVar9 = 0;
|
|
if (*(undefined8 **)(param_1 + 0x88) != (undefined8 *)0x0) {
|
|
uVar9 = **(undefined8 **)(param_1 + 0x88);
|
|
}
|
|
FUN_1401998a0(uVar9);
|
|
uVar9 = 0;
|
|
if (*(undefined8 **)(param_1 + 0x90) != (undefined8 *)0x0) {
|
|
uVar9 = **(undefined8 **)(param_1 + 0x90);
|
|
}
|
|
FUN_1401998a0(uVar9);
|
|
iVar13 = 0;
|
|
lVar5 = 0;
|
|
if (0 < *(int *)(param_1 + 0x50)) {
|
|
do {
|
|
if ((lVar5 < 0) || (*(int *)(param_1 + 0x50) <= iVar13)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
puVar10 = *(undefined8 **)(*(longlong *)(param_1 + 0x48) + lVar5 * 8);
|
|
uVar9 = 0;
|
|
if (puVar10 != (undefined8 *)0x0) {
|
|
uVar9 = *puVar10;
|
|
}
|
|
FUN_1401998a0(uVar9);
|
|
iVar13 = iVar13 + 1;
|
|
lVar5 = lVar5 + 1;
|
|
} while (iVar13 < *(int *)(param_1 + 0x50));
|
|
}
|
|
iVar13 = 0;
|
|
lVar5 = 0;
|
|
if (0 < *(int *)(param_1 + 0x78)) {
|
|
do {
|
|
if ((lVar5 < 0) || (*(int *)(param_1 + 0x78) <= iVar13)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6e0();
|
|
}
|
|
puVar10 = *(undefined8 **)(*(longlong *)(param_1 + 0x70) + lVar5 * 8);
|
|
uVar9 = 0;
|
|
if (puVar10 != (undefined8 *)0x0) {
|
|
uVar9 = *puVar10;
|
|
}
|
|
FUN_1401998a0(uVar9);
|
|
iVar13 = iVar13 + 1;
|
|
lVar5 = lVar5 + 1;
|
|
} while (iVar13 < *(int *)(param_1 + 0x78));
|
|
}
|
|
return;
|
|
}
|
|
|