server-re/decomp/MessageServer_Release_x64/full/functions/0x14008f270.c

255 lines
7.8 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14008f270 FUN_14008f270
* Pseudocode, not original source. */
ulonglong FUN_14008f270(longlong param_1,ulonglong param_2,ulonglong *param_3,undefined8 param_4)
{
longlong *plVar1;
undefined8 *puVar2;
undefined8 *puVar3;
uint uVar4;
uint uVar5;
ulonglong *puVar6;
undefined8 uVar7;
uint *puVar8;
ulonglong *puVar9;
int *piVar10;
undefined ***pppuVar11;
undefined8 **ppuVar12;
char *pcVar13;
uint *puVar14;
uint uVar15;
uint uVar16;
uint uVar17;
ulonglong *puVar18;
longlong *plVar19;
ulonglong uVar20;
uint **ppuVar21;
uint *local_res8;
int *local_res20;
undefined8 *local_98;
undefined8 local_90;
int *local_88;
undefined1 local_80;
int *local_78;
undefined1 local_70;
undefined **local_68;
undefined8 local_60;
undefined8 local_58;
undefined8 local_50;
undefined8 local_48;
local_90 = 0xfffffffffffffffe;
plVar19 = (longlong *)(param_2 & 0xffffffff);
puVar18 = param_3;
local_res8 = (uint *)FUN_14006cbf0(0x400);
puVar9 = (ulonglong *)0x0;
uVar16 = 0;
uVar17 = 0;
puVar6 = puVar9;
if (local_res8 != (uint *)0x0) {
puVar18 = (ulonglong *)(param_1 + 0x60);
if (param_1 == 0) {
puVar18 = puVar9;
}
puVar6 = FUN_1400724c0((undefined8 *)local_res8,0,puVar18,param_4);
}
if (puVar6 == (ulonglong *)0x0) {
local_98 = (undefined8 *)0x0;
}
else {
local_98 = (undefined8 *)FUN_14006cbf0(0x10);
local_98[1] = 1;
*local_98 = puVar6;
}
puVar2 = local_98;
ppuVar12 = &local_98;
FUN_14006e8a0((longlong *)(param_1 + 0x748),(longlong *)ppuVar12);
puVar3 = local_98;
if (puVar2 != (undefined8 *)0x0) {
plVar1 = puVar2 + 1;
*plVar1 = *plVar1 + -1;
if (*plVar1 == 0) {
plVar1 = (longlong *)*local_98;
if (plVar1 != (longlong *)0x0) {
FUN_140072370(plVar1,ppuVar12,(longlong *)puVar18,param_4);
FUN_14006cc60(plVar1);
}
FUN_14006cc60(puVar3);
}
}
puVar6 = puVar9;
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
}
*(undefined1 *)((longlong)puVar6 + 0x314) = 1;
pcVar13 = *(char **)(param_1 + 0x218);
if (*(char **)(param_1 + 0x218) == (char *)0x0) {
pcVar13 = PTR_DAT_1401ac008;
}
puVar6 = puVar9;
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
}
uVar7 = FUN_140073b00((longlong)puVar6,pcVar13,(short)plVar19,param_4);
if ((char)uVar7 != '\0') {
puVar6 = puVar9;
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
}
FUN_1400734d0((longlong)puVar6,pcVar13,plVar19,param_4);
puVar6 = puVar9;
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
puVar6 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
}
FUN_1400716c0((longlong)puVar6,param_1 + 0xb0,plVar19,param_4);
if (*(undefined8 **)(param_1 + 0x748) != (undefined8 *)0x0) {
puVar9 = (ulonglong *)**(undefined8 **)(param_1 + 0x748);
}
uVar7 = FUN_1400765b0(*(longlong *)(param_1 + 0x790),(longlong *)puVar9,plVar19,param_4);
return CONCAT71((int7)((ulonglong)uVar7 >> 8),1);
}
FUN_14006cb70(puVar6,pcVar13,plVar19,param_4);
local_res8 = (uint *)PTR_DAT_1401ac010;
uVar4 = FUN_14006c9f0(&DAT_14015cd00);
if ((local_res8 != (uint *)0x0) &&
(puVar9 = (ulonglong *)0x0, local_res8 != (uint *)PTR_DAT_1401ac010)) {
puVar9 = (ulonglong *)(ulonglong)local_res8[-2];
}
uVar5 = uVar4;
if ((((int)uVar4 <= (int)puVar9) && (uVar5 = uVar17, local_res8 != (uint *)0x0)) &&
(local_res8 != (uint *)PTR_DAT_1401ac010)) {
uVar5 = local_res8[-2];
}
uVar15 = 1;
if (1 < (int)uVar5) {
uVar15 = uVar5;
}
uVar5 = uVar17;
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
uVar5 = local_res8[-2];
}
if ((int)uVar5 < (int)uVar15) {
if (local_res8 == (uint *)0x0) {
local_res8 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar15 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar15 == 0) {
FUN_1400031e0((longlong *)&local_res8,PTR_DAT_1401ac010,puVar9,param_4);
}
else {
uVar5 = uVar17;
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
uVar5 = local_res8[-2];
}
if (uVar15 != uVar5) {
puVar8 = (uint *)FUN_14006cbf0((longlong)(int)uVar15 * 2 + 10);
if (puVar8 != (uint *)0x0) {
*puVar8 = 0;
puVar8[1] = 1;
}
*puVar8 = uVar15;
uVar5 = uVar17;
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
uVar5 = local_res8[-2];
}
puVar14 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar15 < (int)uVar5) {
LAB_14008f48d:
if (local_res8 != (uint *)0x0) {
puVar14 = local_res8;
}
}
else {
uVar15 = uVar17;
if (local_res8 != (uint *)0x0) {
if (local_res8 != (uint *)PTR_DAT_1401ac010) {
uVar15 = local_res8[-2];
}
goto LAB_14008f48d;
}
}
uVar20 = (ulonglong)uVar15;
FUN_14006ca20(puVar8 + 2,puVar14,uVar15);
FUN_1400031e0((longlong *)&local_res8,puVar14,uVar20,param_4);
local_res8 = puVar8 + 2;
}
}
}
FUN_140002e40((longlong *)&local_res8);
puVar8 = local_res8;
if (local_res8 == (uint *)0x0) {
puVar8 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar8,&DAT_14015cd00,uVar4);
puVar8 = local_res8;
if (local_res8 == (uint *)0x0) {
puVar8 = (uint *)PTR_DAT_1401ac010;
}
uVar4 = FUN_14006c9f0((short *)puVar8);
uVar17 = uVar16;
if (0 < (int)uVar4) {
uVar17 = uVar4;
}
uVar4 = uVar16;
if ((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) {
uVar4 = local_res8[-2];
}
if (((int)uVar4 <= (int)uVar17) && (uVar17 = uVar16, local_res8 != (uint *)0x0)) {
if (local_res8 == (uint *)PTR_DAT_1401ac010) goto LAB_14008f53d;
uVar17 = local_res8[-2];
}
if (((local_res8 != (uint *)PTR_DAT_1401ac010) && (local_res8 != (uint *)0x0)) &&
(local_res8 + -2 != (uint *)0x0)) {
local_res8[-2] = uVar17;
*(undefined2 *)((longlong)local_res8 + (longlong)(int)uVar17 * 2) = 0;
}
LAB_14008f53d:
local_60 = 0;
local_58 = 0;
local_50 = 0;
local_48 = 0;
local_68 = Proud::ByteArray::vftable;
ppuVar21 = &local_res8;
uVar7 = 1;
puVar9 = (ulonglong *)
FUN_140078c10((longlong *)&local_res20,0x10,1,(longlong *)ppuVar21,(longlong)&local_68);
FUN_140078ae0(param_3,puVar9,uVar7,ppuVar21);
piVar10 = local_res20;
if (local_res20 != (int *)0x0) {
local_88 = local_res20;
FUN_14006b350(local_res20);
local_80 = 1;
*(longlong *)(local_res20 + 0x10) = *(longlong *)(local_res20 + 0x10) + -1;
if (*(longlong *)(local_res20 + 0x10) == 0) {
FUN_14006b3e0((longlong)piVar10);
local_80 = 0;
FUN_1400640e0(local_res20,puVar9,uVar7,ppuVar21);
}
else {
FUN_14006b3e0((longlong)piVar10);
}
}
pppuVar11 = &local_68;
FUN_140078360(pppuVar11);
puVar8 = local_res8;
if (((local_res8 != (uint *)0x0) && (local_res8 != (uint *)PTR_DAT_1401ac010)) &&
(puVar14 = local_res8 + -2, puVar14 != (uint *)0x0)) {
piVar10 = (int *)FUN_14006cb70(pppuVar11,puVar9,uVar7,ppuVar21);
local_78 = piVar10;
FUN_14006b350(piVar10);
local_70 = 1;
puVar8 = puVar8 + -1;
*puVar8 = *puVar8 - 1;
if (*puVar8 == 0) {
FUN_14006cc60(puVar14);
}
local_res8 = (uint *)FUN_14006b3e0((longlong)piVar10);
}
return (ulonglong)local_res8 & 0xffffffffffffff00;
}