313 lines
9.6 KiB
C
313 lines
9.6 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400ca800 FUN_1400ca800
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400ca800(int *param_1,int param_2,int *param_3)
|
|
|
|
{
|
|
uint uVar1;
|
|
int *piVar2;
|
|
int iVar3;
|
|
undefined8 *puVar4;
|
|
undefined8 *puVar5;
|
|
longlong lVar6;
|
|
longlong lVar7;
|
|
longlong lVar8;
|
|
longlong *plVar9;
|
|
undefined8 **ppuVar10;
|
|
int iVar11;
|
|
int iVar12;
|
|
ulonglong uVar13;
|
|
int iVar14;
|
|
longlong lVar15;
|
|
longlong lVar16;
|
|
int local_res18;
|
|
undefined8 *local_88;
|
|
undefined8 *local_80;
|
|
undefined8 *local_78;
|
|
undefined8 *local_70;
|
|
undefined8 local_68;
|
|
int *local_60;
|
|
undefined1 local_58;
|
|
|
|
iVar12 = (int)param_3;
|
|
local_68 = 0xfffffffffffffffe;
|
|
uVar13 = (ulonglong)*(uint *)(*(longlong *)(param_1 + 0x52) + 600);
|
|
if (*(uint *)(*(longlong *)(param_1 + 0x52) + 600) != 0) {
|
|
FUN_1400f4580((double *)(param_1 + 0x7a),(double)uVar13 * 0.001);
|
|
}
|
|
puVar5 = operator_new(0x28);
|
|
if (puVar5 == (undefined8 *)0x0) {
|
|
puVar5 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
param_3 = param_1;
|
|
puVar5 = FUN_140074090(puVar5,FUN_1400c8950,param_1);
|
|
}
|
|
if (puVar5 == (undefined8 *)0x0) {
|
|
local_80 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
local_80 = (undefined8 *)FUN_14006cbf0(0x10);
|
|
local_80[1] = 1;
|
|
*local_80 = puVar5;
|
|
}
|
|
puVar5 = local_80;
|
|
FUN_1400c2980((longlong *)(param_1 + 0x22),(longlong *)&local_80);
|
|
puVar4 = local_80;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
plVar9 = puVar5 + 1;
|
|
*plVar9 = *plVar9 + -1;
|
|
if (*plVar9 == 0) {
|
|
puVar5 = (undefined8 *)*local_80;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar5);
|
|
operator_delete(puVar5);
|
|
}
|
|
FUN_14006cc60(puVar4);
|
|
}
|
|
}
|
|
puVar5 = operator_new(0x28);
|
|
if (puVar5 == (undefined8 *)0x0) {
|
|
puVar5 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
param_3 = param_1;
|
|
puVar5 = FUN_140074090(puVar5,FUN_1400c3f80,param_1);
|
|
}
|
|
if (puVar5 == (undefined8 *)0x0) {
|
|
local_78 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
local_78 = (undefined8 *)FUN_14006cbf0(0x10);
|
|
local_78[1] = 1;
|
|
*local_78 = puVar5;
|
|
}
|
|
puVar5 = local_78;
|
|
ppuVar10 = &local_78;
|
|
FUN_1400c2980((longlong *)(param_1 + 0x24),(longlong *)ppuVar10);
|
|
puVar4 = local_78;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
plVar9 = puVar5 + 1;
|
|
*plVar9 = *plVar9 + -1;
|
|
if (*plVar9 == 0) {
|
|
puVar5 = (undefined8 *)*local_78;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar5);
|
|
operator_delete(puVar5);
|
|
}
|
|
FUN_14006cc60(puVar4);
|
|
}
|
|
}
|
|
iVar14 = 0;
|
|
if (0 < iVar12) {
|
|
piVar2 = param_1 + 0xe;
|
|
do {
|
|
local_70 = operator_new(0x28);
|
|
if (local_70 == (undefined8 *)0x0) {
|
|
puVar5 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
param_3 = param_1;
|
|
puVar5 = FUN_140074090(local_70,FUN_1400ca7d0,param_1);
|
|
}
|
|
if (puVar5 == (undefined8 *)0x0) {
|
|
local_70 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
local_70 = (undefined8 *)FUN_14006cbf0(0x10);
|
|
local_70[1] = 1;
|
|
*local_70 = puVar5;
|
|
}
|
|
puVar5 = local_70;
|
|
iVar3 = param_1[0x14];
|
|
if (iVar3 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
iVar11 = param_1[0x14];
|
|
FUN_1400c6490((longlong)piVar2,iVar11 + 1,param_3,uVar13);
|
|
iVar11 = iVar11 - iVar3;
|
|
if ((0 < iVar11) && (iVar11 = iVar11 + -1, -1 < iVar11)) {
|
|
lVar15 = (longlong)(iVar11 + iVar3 + 1) << 3;
|
|
lVar16 = (longlong)(iVar11 + iVar3) << 3;
|
|
do {
|
|
lVar6 = FUN_14007a110((longlong)piVar2);
|
|
lVar7 = FUN_14007a110((longlong)piVar2);
|
|
FUN_1400c2980((longlong *)(lVar15 + lVar7),(longlong *)(lVar16 + lVar6));
|
|
lVar16 = lVar16 + -8;
|
|
lVar15 = lVar15 + -8;
|
|
iVar11 = iVar11 + -1;
|
|
} while (-1 < iVar11);
|
|
}
|
|
lVar15 = FUN_14007a110((longlong)piVar2);
|
|
ppuVar10 = &local_70;
|
|
FUN_1400c2980((longlong *)(lVar15 + (longlong)iVar3 * 8),(longlong *)ppuVar10);
|
|
puVar4 = local_70;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
plVar9 = puVar5 + 1;
|
|
*plVar9 = *plVar9 + -1;
|
|
if (*plVar9 == 0) {
|
|
puVar5 = (undefined8 *)*local_70;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar5);
|
|
operator_delete(puVar5);
|
|
}
|
|
FUN_14006cc60(puVar4);
|
|
}
|
|
}
|
|
iVar14 = iVar14 + 1;
|
|
} while (iVar14 < iVar12);
|
|
}
|
|
local_60 = param_1;
|
|
FUN_14006b350(param_1);
|
|
local_58 = 1;
|
|
local_res18 = 0;
|
|
if (0 < param_2) {
|
|
do {
|
|
puVar5 = operator_new(0x28);
|
|
if (puVar5 == (undefined8 *)0x0) {
|
|
puVar5 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
param_3 = param_1;
|
|
puVar5 = FUN_140074090(puVar5,FUN_1400c8980,param_1);
|
|
}
|
|
if (puVar5 == (undefined8 *)0x0) {
|
|
local_88 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
local_88 = (undefined8 *)FUN_14006cbf0(0x10);
|
|
local_88[1] = 1;
|
|
*local_88 = puVar5;
|
|
}
|
|
iVar12 = param_1[0x1e];
|
|
lVar15 = (longlong)iVar12;
|
|
if (iVar12 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
iVar14 = param_1[0x1e];
|
|
uVar1 = iVar14 + 1;
|
|
ppuVar10 = (undefined8 **)(ulonglong)uVar1;
|
|
FUN_1400c6490((longlong)(param_1 + 0x18),uVar1,param_3,uVar13);
|
|
iVar14 = iVar14 - iVar12;
|
|
if ((0 < iVar14) && (iVar14 = iVar14 + -1, lVar16 = (longlong)iVar14, -1 < iVar14)) {
|
|
lVar6 = (lVar16 + lVar15) * 8 + 8;
|
|
do {
|
|
lVar7 = FUN_14007a110((longlong)(param_1 + 0x18));
|
|
lVar8 = FUN_14007a110((longlong)(param_1 + 0x18));
|
|
plVar9 = (longlong *)(lVar6 + lVar8);
|
|
ppuVar10 = *(undefined8 ***)(lVar7 + -8 + lVar6);
|
|
if (ppuVar10 != (undefined8 **)*plVar9) {
|
|
if (ppuVar10 != (undefined8 **)0x0) {
|
|
ppuVar10 = (undefined8 **)((longlong)ppuVar10[1] + 1);
|
|
*(undefined8 ***)(*(longlong *)(lVar7 + -8 + lVar6) + 8) = ppuVar10;
|
|
}
|
|
puVar5 = (undefined8 *)0x0;
|
|
if ((*plVar9 != 0) &&
|
|
(*(longlong *)(*plVar9 + 8) = *(longlong *)(*plVar9 + 8) + -1,
|
|
*(longlong *)(*plVar9 + 8) == 0)) {
|
|
puVar5 = (undefined8 *)*plVar9;
|
|
}
|
|
*plVar9 = *(longlong *)(lVar7 + -8 + lVar6);
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
puVar4 = (undefined8 *)*puVar5;
|
|
if (puVar4 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar4);
|
|
operator_delete(puVar4);
|
|
}
|
|
FUN_14006cc60(puVar5);
|
|
}
|
|
}
|
|
lVar6 = lVar6 + -8;
|
|
lVar16 = lVar16 + -1;
|
|
} while (-1 < lVar16);
|
|
}
|
|
lVar16 = FUN_14007a110((longlong)(param_1 + 0x18));
|
|
if (local_88 != *(undefined8 **)(lVar16 + lVar15 * 8)) {
|
|
if (local_88 != (undefined8 *)0x0) {
|
|
local_88[1] = local_88[1] + 1;
|
|
}
|
|
puVar5 = (undefined8 *)0x0;
|
|
lVar6 = *(longlong *)(lVar16 + lVar15 * 8);
|
|
if ((lVar6 != 0) &&
|
|
(*(longlong *)(*(longlong *)(lVar16 + lVar15 * 8) + 8) = *(longlong *)(lVar6 + 8) + -1,
|
|
*(longlong *)(*(longlong *)(lVar16 + lVar15 * 8) + 8) == 0)) {
|
|
puVar5 = *(undefined8 **)(lVar16 + lVar15 * 8);
|
|
}
|
|
*(undefined8 **)(lVar16 + lVar15 * 8) = local_88;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
puVar4 = (undefined8 *)*puVar5;
|
|
if (puVar4 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar4);
|
|
operator_delete(puVar4);
|
|
}
|
|
FUN_14006cc60(puVar5);
|
|
}
|
|
}
|
|
if (local_88 != (undefined8 *)0x0) {
|
|
plVar9 = local_88 + 1;
|
|
*plVar9 = *plVar9 + -1;
|
|
if (*plVar9 == 0) {
|
|
puVar5 = (undefined8 *)*local_88;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
FUN_1400741a0(puVar5);
|
|
operator_delete(puVar5);
|
|
}
|
|
FUN_14006cc60(local_88);
|
|
}
|
|
}
|
|
local_res18 = local_res18 + 1;
|
|
} while (local_res18 < param_2);
|
|
}
|
|
FUN_14006b3e0((longlong)param_1);
|
|
plVar9 = (longlong *)0x0;
|
|
if (*(undefined8 **)(param_1 + 0x22) != (undefined8 *)0x0) {
|
|
plVar9 = (longlong *)**(undefined8 **)(param_1 + 0x22);
|
|
}
|
|
FUN_140074290(plVar9,ppuVar10,param_3,uVar13);
|
|
plVar9 = (longlong *)0x0;
|
|
if (*(undefined8 **)(param_1 + 0x24) != (undefined8 *)0x0) {
|
|
plVar9 = (longlong *)**(undefined8 **)(param_1 + 0x24);
|
|
}
|
|
FUN_140074290(plVar9,ppuVar10,param_3,uVar13);
|
|
iVar12 = 0;
|
|
lVar15 = 0;
|
|
if (0 < param_1[0x14]) {
|
|
do {
|
|
if ((lVar15 < 0) || (param_1[0x14] <= iVar12)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(plVar9,ppuVar10,param_3,uVar13);
|
|
}
|
|
puVar5 = *(undefined8 **)(*(longlong *)(param_1 + 0x12) + lVar15 * 8);
|
|
plVar9 = (longlong *)0x0;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
plVar9 = (longlong *)*puVar5;
|
|
}
|
|
FUN_140074290(plVar9,ppuVar10,param_3,uVar13);
|
|
iVar12 = iVar12 + 1;
|
|
lVar15 = lVar15 + 1;
|
|
} while (iVar12 < param_1[0x14]);
|
|
}
|
|
iVar12 = 0;
|
|
lVar15 = 0;
|
|
if (0 < param_1[0x1e]) {
|
|
do {
|
|
if ((lVar15 < 0) || (param_1[0x1e] <= iVar12)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(plVar9,ppuVar10,param_3,uVar13);
|
|
}
|
|
puVar5 = *(undefined8 **)(*(longlong *)(param_1 + 0x1c) + lVar15 * 8);
|
|
plVar9 = (longlong *)0x0;
|
|
if (puVar5 != (undefined8 *)0x0) {
|
|
plVar9 = (longlong *)*puVar5;
|
|
}
|
|
FUN_140074290(plVar9,ppuVar10,param_3,uVar13);
|
|
iVar12 = iVar12 + 1;
|
|
lVar15 = lVar15 + 1;
|
|
} while (iVar12 < param_1[0x1e]);
|
|
}
|
|
return;
|
|
}
|
|
|