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

170 lines
5.1 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14006e9e0 FUN_14006e9e0
* Pseudocode, not original source. */
void FUN_14006e9e0(int *param_1,longlong *param_2,undefined8 param_3,undefined8 param_4)
{
int *piVar1;
bool bVar2;
DWORD DVar3;
uint uVar4;
int iVar5;
uint uVar6;
uint *puVar7;
int *piVar8;
longlong *plVar9;
LPCWSTR pWVar10;
longlong *plVar11;
ulonglong uVar12;
undefined *puVar13;
LPCWSTR pWVar14;
uint uVar15;
LPCWSTR local_res8;
piVar1 = param_1 + 0xc;
bVar2 = FUN_14006b3f0(piVar1);
if (!bVar2) {
return;
}
FUN_14006b350(piVar1);
puVar13 = *(undefined **)(param_1 + 2);
if ((((puVar13 != (undefined *)0x0) && (puVar13 != PTR_DAT_1401ac010)) &&
(*(int *)(puVar13 + -8) != 0)) ||
((*param_1 != 3 || (DVar3 = GetTickCount(), DVar3 - param_1[1] < 0x7531)))) goto LAB_14006eca1;
plVar9 = (longlong *)(param_1 + 2);
plVar11 = param_2;
FUN_140003110(plVar9,param_2,param_3,param_4);
*param_1 = 0;
DVar3 = GetTickCount();
param_1[1] = DVar3;
FUN_14006cb70(plVar9,plVar11,param_3,param_4);
pWVar14 = (LPCWSTR)PTR_DAT_1401ac010;
local_res8 = (LPCWSTR)PTR_DAT_1401ac010;
uVar4 = FUN_14006c9f0(L"**ErrorReport** ");
uVar12 = 0;
if ((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
uVar12 = (ulonglong)*(uint *)((longlong)pWVar14 + -8);
}
uVar6 = uVar4;
if ((((int)uVar4 <= (int)uVar12) && (uVar6 = 0, pWVar14 != (LPCWSTR)0x0)) &&
(pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
uVar6 = *(uint *)((longlong)pWVar14 + -8);
}
uVar15 = 1;
if (1 < (int)uVar6) {
uVar15 = uVar6;
}
iVar5 = 0;
if ((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
iVar5 = *(int *)((longlong)pWVar14 + -8);
}
if (iVar5 < (int)uVar15) {
if (pWVar14 == (LPCWSTR)0x0) {
pWVar14 = (LPCWSTR)PTR_DAT_1401ac010;
}
local_res8 = pWVar14;
if ((int)uVar15 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar15 == 0) {
FUN_1400031e0((longlong *)&local_res8,uVar12,param_3,param_4);
}
else {
uVar6 = 0;
if ((pWVar14 != (LPCWSTR)0x0) && (uVar6 = 0, pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
uVar6 = *(uint *)(pWVar14 + -4);
}
if (uVar15 != uVar6) {
puVar7 = (uint *)FUN_14006cbf0((longlong)(int)uVar15 * 2 + 10);
if (puVar7 != (uint *)0x0) {
*puVar7 = 0;
puVar7[1] = 1;
}
*puVar7 = uVar15;
uVar6 = 0;
if ((pWVar14 != (LPCWSTR)0x0) && (uVar6 = 0, pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
uVar6 = *(uint *)(pWVar14 + -4);
}
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
if ((int)uVar15 < (int)uVar6) {
LAB_14006eb71:
if (pWVar14 != (LPCWSTR)0x0) {
pWVar10 = pWVar14;
}
}
else {
uVar15 = 0;
if (pWVar14 != (LPCWSTR)0x0) {
if (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010) {
uVar15 = *(uint *)(pWVar14 + -4);
}
goto LAB_14006eb71;
}
}
uVar12 = (ulonglong)uVar15;
FUN_14006ca20(puVar7 + 2,pWVar10,uVar15);
FUN_1400031e0((longlong *)&local_res8,pWVar10,uVar12,param_4);
local_res8 = (LPCWSTR)(puVar7 + 2);
}
}
}
FUN_140002e40((longlong *)&local_res8);
pWVar14 = local_res8;
pWVar10 = local_res8;
if (local_res8 == (LPCWSTR)0x0) {
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
}
uVar12 = (ulonglong)uVar4;
FUN_14006ca20(pWVar10,L"**ErrorReport** ",uVar4);
pWVar10 = pWVar14;
if (pWVar14 == (LPCWSTR)0x0) {
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
}
uVar6 = FUN_14006c9f0(pWVar10);
uVar4 = 0;
if (0 < (int)uVar6) {
uVar4 = uVar6;
}
uVar6 = 0;
if ((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) {
uVar6 = *(uint *)(pWVar14 + -4);
}
if (((int)uVar4 < (int)uVar6) || (uVar4 = 0, pWVar14 == (LPCWSTR)0x0)) {
LAB_14006ec09:
if (((pWVar14 != (LPCWSTR)PTR_DAT_1401ac010) && (pWVar14 != (LPCWSTR)0x0)) &&
(pWVar14 + -4 != (LPCWSTR)0x0)) {
*(uint *)(pWVar14 + -4) = uVar4;
pWVar14[(int)uVar4] = L'\0';
}
}
else if (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010) {
uVar4 = *(uint *)(pWVar14 + -4);
goto LAB_14006ec09;
}
FUN_140053b20((longlong *)&local_res8,param_2);
puVar13 = &DAT_1401595e0;
FUN_1400141f0((longlong *)&local_res8,(short *)&DAT_1401595e0);
pWVar14 = local_res8;
pWVar10 = local_res8;
if (local_res8 == (LPCWSTR)0x0) {
pWVar10 = (LPCWSTR)PTR_DAT_1401ac010;
}
OutputDebugStringW(pWVar10);
if (((pWVar14 != (LPCWSTR)0x0) && (pWVar14 != (LPCWSTR)PTR_DAT_1401ac010)) &&
(pWVar14 + -4 != (LPCWSTR)0x0)) {
piVar8 = (int *)FUN_14006cb70(pWVar10,puVar13,uVar12,param_4);
FUN_14006b350(piVar8);
pWVar10 = pWVar14 + -2;
*(uint *)pWVar10 = *(uint *)pWVar10 - 1;
if (*(uint *)pWVar10 == 0) {
FUN_14006cc60(pWVar14 + -4);
}
FUN_14006b3e0((longlong)piVar8);
}
LAB_14006eca1:
FUN_14006b3e0((longlong)piVar1);
return;
}