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

515 lines
18 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14008fb10 FUN_14008fb10
* Pseudocode, not original source. */
/* WARNING: Removing unreachable block (ram,0x00014008fbd3) */
/* WARNING: Removing unreachable block (ram,0x00014008fbda) */
/* WARNING: Removing unreachable block (ram,0x00014008fbe6) */
/* WARNING: Removing unreachable block (ram,0x00014008fc10) */
/* WARNING: Removing unreachable block (ram,0x00014008fc30) */
undefined8
FUN_14008fb10(longlong *param_1,int param_2,longlong **param_3,longlong param_4,ulonglong *param_5)
{
int iVar1;
char cVar2;
undefined4 uVar3;
uint uVar4;
uint uVar5;
int *piVar6;
undefined4 *puVar7;
longlong *plVar8;
undefined8 *puVar9;
longlong lVar11;
longlong lVar12;
uint *puVar13;
ulonglong *puVar14;
undefined **ppuVar15;
longlong *plVar16;
longlong *plVar17;
undefined ***pppuVar18;
char *pcVar19;
longlong *plVar20;
uint *puVar21;
int iVar22;
uint uVar23;
longlong lVar24;
longlong **pplVar25;
ulonglong uVar26;
uint uVar27;
longlong lVar28;
uint **ppuVar29;
longlong lVar30;
int local_res10;
uint *local_158;
longlong *local_150;
longlong local_148;
int *local_140;
longlong *local_138;
longlong *local_130;
longlong local_128;
int *local_120;
undefined1 local_118;
int *local_110;
undefined1 local_108;
uint local_100;
int local_fc;
undefined **local_f8;
undefined8 local_f0;
undefined8 local_e8;
undefined8 local_e0;
undefined8 local_d8;
longlong *local_d0;
undefined1 local_c8;
int *local_c0;
undefined1 local_b8;
undefined8 local_b0;
undefined8 local_a8 [2];
exception local_98 [88];
undefined8 uVar10;
local_b0 = 0xfffffffffffffffe;
pplVar25 = param_3;
lVar28 = param_4;
piVar6 = (int *)(**(code **)(*param_1 + 0x58))();
local_120 = piVar6;
FUN_14006b350(piVar6);
local_118 = 1;
if (DAT_1401b42cf != '\0') {
pplVar25 = (longlong **)*param_1;
(*(code *)pplVar25[0x19])(param_1);
}
if (param_2 == 0) {
FUN_140063e10((longlong)param_3,(longlong)(param_1 + 0x309),pplVar25,lVar28);
FUN_14006b3e0((longlong)piVar6);
}
else {
if (*(int *)(param_3 + 3) == 0) {
local_fc = *(int *)(param_3 + 3);
FUN_140063f80((longlong)param_3,1,pplVar25,lVar28);
puVar7 = (undefined4 *)FUN_140008250((longlong)param_3);
*puVar7 = 0;
}
local_138 = param_1 + 0xd9;
plVar20 = (longlong *)0x0;
FUN_14008a140((longlong)local_138,0);
local_130 = param_1 + 0xde;
FUN_14008c670((char *)local_130);
local_res10 = 0;
local_148 = 0;
if (0 < *(int *)(param_3 + 3)) {
do {
lVar11 = local_148;
plVar16 = (longlong *)0x180;
plVar8 = (longlong *)FUN_14006cbf0(0x180);
local_150 = plVar8;
if (plVar8 == (longlong *)0x0) {
puVar9 = (undefined8 *)0x0;
}
else {
plVar20 = param_1;
puVar9 = FUN_1400d96c0(plVar8,(longlong)param_1,pplVar25,lVar28);
plVar16 = plVar8;
}
if (puVar9 == (undefined8 *)0x0) {
plVar8 = (longlong *)0x0;
}
else {
plVar16 = (longlong *)0x10;
plVar8 = (longlong *)FUN_14006cbf0(0x10);
plVar8[1] = 1;
*plVar8 = (longlong)puVar9;
}
lVar24 = 0;
local_150 = plVar8;
if ((lVar11 < 0) || (*(int *)(param_3 + 3) <= local_res10)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(plVar16,plVar20,pplVar25,lVar28);
}
uVar4 = *(uint *)((longlong)param_3[2] + lVar11 * 4);
pcVar19 = (char *)param_1[0x43];
lVar30 = lVar24;
local_100 = uVar4;
if (((pcVar19 == (char *)0x0) || (pcVar19 == PTR_DAT_1401ac008)) ||
(*(int *)(pcVar19 + -8) == 0)) {
lVar12 = lVar24;
if (plVar8 != (longlong *)0x0) {
lVar12 = *plVar8;
}
if (*(longlong **)(lVar12 + 0x150) != (longlong *)0x0) {
lVar30 = **(longlong **)(lVar12 + 0x150);
}
pcVar19 = (char *)(ulonglong)uVar4;
uVar3 = FUN_140073ab0(lVar30,(short)uVar4,pplVar25,lVar28);
cVar2 = (char)uVar3;
}
else {
lVar12 = lVar24;
if (plVar8 != (longlong *)0x0) {
lVar12 = *plVar8;
}
if (*(longlong **)(lVar12 + 0x150) != (longlong *)0x0) {
lVar30 = **(longlong **)(lVar12 + 0x150);
}
pplVar25 = (longlong **)(ulonglong)uVar4;
uVar10 = FUN_140073b00(lVar30,pcVar19,(short)uVar4,lVar28);
cVar2 = (char)uVar10;
}
if (cVar2 == '\0') {
if (*(char *)((longlong)param_1 + 0x255) == '\0') {
FUN_14006cb70(lVar30,pcVar19,pplVar25,lVar28);
local_158 = (uint *)PTR_DAT_1401ac010;
uVar4 = FUN_14006c9f0(&DAT_14015cd00);
uVar5 = 0;
uVar26 = 0;
if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) {
uVar26 = (ulonglong)local_158[-2];
}
uVar27 = uVar4;
if ((((int)uVar4 <= (int)uVar26) && (uVar27 = uVar5, local_158 != (uint *)0x0)) &&
(local_158 != (uint *)PTR_DAT_1401ac010)) {
uVar27 = local_158[-2];
}
uVar23 = 1;
if (1 < (int)uVar27) {
uVar23 = uVar27;
}
uVar27 = uVar5;
if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) {
uVar27 = local_158[-2];
}
if ((int)uVar27 < (int)uVar23) {
if (local_158 == (uint *)0x0) {
local_158 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar23 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar23 == 0) {
FUN_1400031e0((longlong *)&local_158,PTR_DAT_1401ac010,uVar26,lVar28);
}
else {
uVar27 = uVar5;
if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) {
uVar27 = local_158[-2];
}
if (uVar23 != uVar27) {
puVar13 = (uint *)FUN_14006cbf0((longlong)(int)uVar23 * 2 + 10);
if (puVar13 != (uint *)0x0) {
*puVar13 = 0;
puVar13[1] = 1;
}
*puVar13 = uVar23;
uVar27 = uVar5;
if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) {
uVar27 = local_158[-2];
}
puVar21 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar23 < (int)uVar27) {
LAB_1400901d3:
if (local_158 != (uint *)0x0) {
puVar21 = local_158;
}
}
else {
uVar23 = uVar5;
if (local_158 != (uint *)0x0) {
if (local_158 != (uint *)PTR_DAT_1401ac010) {
uVar23 = local_158[-2];
}
goto LAB_1400901d3;
}
}
uVar26 = (ulonglong)uVar23;
FUN_14006ca20(puVar13 + 2,puVar21,uVar23);
FUN_1400031e0((longlong *)&local_158,puVar21,uVar26,lVar28);
local_158 = puVar13 + 2;
}
}
}
FUN_140002e40((longlong *)&local_158);
puVar13 = local_158;
if (local_158 == (uint *)0x0) {
puVar13 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar13,&DAT_14015cd00,uVar4);
puVar13 = local_158;
if (local_158 == (uint *)0x0) {
puVar13 = (uint *)PTR_DAT_1401ac010;
}
uVar5 = FUN_14006c9f0((short *)puVar13);
uVar27 = 0;
uVar4 = 0;
if (0 < (int)uVar5) {
uVar4 = uVar5;
}
uVar5 = uVar27;
if ((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) {
uVar5 = local_158[-2];
}
if (((int)uVar5 <= (int)uVar4) && (uVar4 = uVar27, local_158 != (uint *)0x0)) {
if (local_158 == (uint *)PTR_DAT_1401ac010) goto LAB_140090290;
uVar4 = local_158[-2];
}
if (((local_158 != (uint *)PTR_DAT_1401ac010) && (local_158 != (uint *)0x0)) &&
(local_158 + -2 != (uint *)0x0)) {
local_158[-2] = uVar4;
*(undefined2 *)((longlong)local_158 + (longlong)(int)uVar4 * 2) = 0;
}
LAB_140090290:
local_f0 = 0;
local_e8 = 0;
local_e0 = 0;
local_d8 = 0;
local_f8 = Proud::ByteArray::vftable;
ppuVar29 = &local_158;
uVar10 = 1;
puVar14 = (ulonglong *)
FUN_140078c10((longlong *)&local_140,0x10,1,(longlong *)ppuVar29,
(longlong)&local_f8);
FUN_140078ae0(param_5,puVar14,uVar10,ppuVar29);
piVar6 = local_140;
if (local_140 != (int *)0x0) {
local_110 = local_140;
FUN_14006b350(local_140);
local_108 = 1;
*(longlong *)(local_140 + 0x10) = *(longlong *)(local_140 + 0x10) + -1;
if (*(longlong *)(local_140 + 0x10) == 0) {
FUN_14006b3e0((longlong)piVar6);
local_108 = 0;
FUN_1400640e0(local_140,puVar14,uVar10,ppuVar29);
}
else {
FUN_14006b3e0((longlong)piVar6);
local_108 = 0;
}
}
pppuVar18 = &local_f8;
FUN_140078360(pppuVar18);
puVar13 = local_158;
if (((local_158 != (uint *)0x0) && (local_158 != (uint *)PTR_DAT_1401ac010)) &&
(puVar21 = local_158 + -2, puVar21 != (uint *)0x0)) {
piVar6 = (int *)FUN_14006cb70(pppuVar18,puVar14,uVar10,ppuVar29);
local_c0 = piVar6;
FUN_14006b350(piVar6);
local_b8 = 1;
puVar13 = puVar13 + -1;
*puVar13 = *puVar13 - 1;
if (*puVar13 == 0) {
FUN_14006cc60(puVar21);
}
FUN_14006b3e0((longlong)piVar6);
local_b8 = 0;
}
local_158 = (uint *)PTR_DAT_1401ac010;
FUN_14008a140((longlong)local_138,0);
FUN_14008c670((char *)local_130);
plVar20 = local_150;
if (plVar8 != (longlong *)0x0) {
plVar8 = plVar8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
puVar9 = (undefined8 *)*local_150;
if (puVar9 != (undefined8 *)0x0) {
(**(code **)*puVar9)(puVar9,1);
}
FUN_14006cc60(plVar20);
}
}
FUN_14006b3e0((longlong)local_120);
ppuVar15 = Proud::CFastArray<int,0>::vftable;
*param_3 = (longlong *)Proud::CFastArray<int,0>::vftable;
if (param_3[2] != (longlong *)0x0) {
if (param_3[1] == (longlong *)0x0) {
ppuVar15 = (undefined **)FUN_14006cc60(param_3[2]);
}
else {
ppuVar15 = (undefined **)(**(code **)(*param_3[1] + 0x18))();
}
}
return (ulonglong)ppuVar15 & 0xffffffffffffff00;
}
iVar1 = *(int *)(param_4 + 0x18);
if (iVar1 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
iVar22 = *(int *)(param_4 + 0x18);
uVar5 = iVar22 + 1;
plVar20 = (longlong *)(ulonglong)uVar5;
FUN_140063f80(param_4,uVar5,pplVar25,lVar28);
iVar22 = iVar22 - iVar1;
if ((0 < iVar22) && (iVar22 = iVar22 + -1, lVar24 = (longlong)iVar22, -1 < iVar22)) {
lVar30 = (iVar1 + lVar24) * 4 + 4;
do {
lVar11 = FUN_140008250(param_4);
lVar12 = FUN_140008250(param_4);
*(undefined4 *)(lVar12 + lVar30) = *(undefined4 *)(lVar11 + -4 + lVar30);
lVar30 = lVar30 + -4;
lVar24 = lVar24 + -1;
lVar11 = local_148;
} while (-1 < lVar24);
}
lVar24 = FUN_140008250(param_4);
plVar16 = local_150;
*(uint *)(lVar24 + (longlong)iVar1 * 4) = uVar4;
if (plVar8 != (longlong *)0x0) {
plVar8 = plVar8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
if ((undefined8 *)*local_150 != (undefined8 *)0x0) {
plVar20 = (longlong *)0x1;
(*(code *)**(undefined8 **)*local_150)();
}
FUN_14006cc60(plVar16);
}
}
}
else {
lVar11 = lVar24;
if (plVar8 != (longlong *)0x0) {
lVar11 = *plVar8;
}
lVar30 = lVar24;
if (*(longlong **)(lVar11 + 0x150) != (longlong *)0x0) {
lVar30 = **(longlong **)(lVar11 + 0x150);
}
if (plVar8 != (longlong *)0x0) {
lVar24 = *plVar8;
}
puVar9 = FUN_140071560(lVar30,local_a8);
*(undefined4 *)(lVar24 + 0x160) = *(undefined4 *)(puVar9 + 1);
*(undefined2 *)(lVar24 + 0x164) = *(undefined2 *)((longlong)puVar9 + 0xc);
if (plVar8 == (longlong *)0x0) {
lVar11 = 0;
}
else {
lVar11 = *plVar8;
}
if (*(short *)(lVar11 + 0x164) == 0) {
LAB_14009042d:
FUN_14006ba50(local_98,L"m_cachedLocalAddr has an unexpected value!",pplVar25,lVar28);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_98,(ThrowInfo *)&DAT_1401a93e8);
}
if (plVar8 == (longlong *)0x0) {
lVar11 = 0;
}
else {
lVar11 = *plVar8;
}
if (*(short *)(lVar11 + 0x164) == -1) goto LAB_14009042d;
iVar1 = (int)local_138[3];
if (iVar1 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
lVar11 = local_138[3];
FUN_14008a140((longlong)local_138,(int)lVar11 + 1);
plVar20 = local_138;
iVar22 = (int)lVar11 - iVar1;
if ((0 < iVar22) && (iVar22 = iVar22 + -1, -1 < iVar22)) {
lVar11 = (longlong)(iVar22 + iVar1 + 1) << 3;
lVar24 = (longlong)(iVar22 + iVar1) << 3;
do {
lVar30 = FUN_14007a110((longlong)plVar20);
lVar12 = FUN_14007a110((longlong)plVar20);
FUN_1400a2a80((longlong *)(lVar11 + lVar12),(longlong *)(lVar24 + lVar30));
lVar24 = lVar24 + -8;
lVar11 = lVar11 + -8;
iVar22 = iVar22 + -1;
} while (-1 < iVar22);
}
lVar11 = FUN_14007a110((longlong)local_138);
FUN_1400a2a80((longlong *)(lVar11 + (longlong)iVar1 * 8),(longlong *)&local_150);
plVar16 = (longlong *)0x0;
plVar20 = plVar16;
if (plVar8 != (longlong *)0x0) {
plVar20 = (longlong *)*plVar8;
}
pplVar25 = &local_150;
FUN_14008f8a0((char *)local_130,(longlong)(plVar20 + 0x2b),(longlong *)pplVar25);
plVar20 = plVar16;
if (plVar8 != (longlong *)0x0) {
plVar20 = (longlong *)*plVar8;
}
plVar17 = plVar16;
if ((undefined8 *)plVar20[0x2a] != (undefined8 *)0x0) {
plVar17 = *(longlong **)plVar20[0x2a];
}
FUN_1400716c0((longlong)plVar17,plVar20,pplVar25,lVar28);
plVar20 = plVar16;
if (plVar8 != (longlong *)0x0) {
plVar20 = (longlong *)*plVar8;
}
plVar17 = plVar16;
if ((undefined8 *)plVar20[0x2a] != (undefined8 *)0x0) {
plVar17 = *(longlong **)plVar20[0x2a];
}
FUN_1400765b0(param_1[0xf1],plVar17,(longlong *)pplVar25,lVar28);
plVar20 = plVar16;
if (plVar8 != (longlong *)0x0) {
plVar20 = (longlong *)*plVar8;
}
plVar17 = plVar16;
if ((undefined8 *)plVar20[0x2a] != (undefined8 *)0x0) {
plVar17 = *(longlong **)plVar20[0x2a];
}
FUN_1400dafe0((longlong)plVar17);
if ((plVar8 == (longlong *)0x0) || (plVar20 = (longlong *)(*plVar8 + 0x40), *plVar8 == 0))
{
plVar20 = plVar16;
}
FUN_1400d8980(&local_128,(longlong)plVar20);
plVar17 = plVar16;
if (plVar8 != (longlong *)0x0) {
plVar17 = (longlong *)*plVar8;
}
plVar17 = plVar17 + 0x15;
local_d0 = plVar17;
FUN_14006b350((int *)plVar17);
local_c8 = 1;
if (plVar8 != (longlong *)0x0) {
plVar16 = (longlong *)*plVar8;
}
FUN_1400d8bf0((longlong)plVar16,plVar20,(undefined **)pplVar25,lVar28);
FUN_14006b3e0((longlong)plVar17);
local_c8 = 0;
FUN_1400d8990(&local_128);
plVar16 = local_150;
lVar11 = local_148;
if (plVar8 != (longlong *)0x0) {
plVar8 = plVar8 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
if ((undefined8 *)*local_150 != (undefined8 *)0x0) {
plVar20 = (longlong *)0x1;
(*(code *)**(undefined8 **)*local_150)();
}
FUN_14006cc60(plVar16);
lVar11 = local_148;
}
}
}
local_res10 = local_res10 + 1;
local_148 = lVar11 + 1;
piVar6 = local_120;
} while (local_res10 < *(int *)(param_3 + 3));
}
FUN_14006b3e0((longlong)piVar6);
}
ppuVar15 = Proud::CFastArray<int,0>::vftable;
*param_3 = (longlong *)Proud::CFastArray<int,0>::vftable;
if (param_3[2] != (longlong *)0x0) {
if (param_3[1] == (longlong *)0x0) {
ppuVar15 = (undefined **)FUN_14006cc60(param_3[2]);
}
else {
ppuVar15 = (undefined **)(**(code **)(*param_3[1] + 0x18))();
}
}
return CONCAT71((int7)((ulonglong)ppuVar15 >> 8),1);
}