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

113 lines
3.6 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400c7b40 FUN_1400c7b40
* Pseudocode, not original source. */
void FUN_1400c7b40(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)
{
wchar_t *pwVar1;
undefined *puVar2;
undefined *puVar3;
longlong *plVar4;
wchar_t *pwVar5;
int *piVar6;
wchar_t *pwVar7;
wchar_t **ppwVar8;
int *piVar9;
undefined8 uVar10;
undefined **ppuVar11;
wchar_t *local_res8;
undefined *local_78;
wchar_t *local_70;
undefined1 local_68;
undefined8 local_60;
wchar_t *local_58;
undefined1 local_50;
undefined **local_48;
undefined8 local_40;
undefined8 local_38;
undefined8 local_30;
undefined8 local_28;
local_60 = 0xfffffffffffffffe;
if ((*(longlong *)(param_1 + 0x148) != 0) &&
(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x758) != 0)) {
FUN_14006cb70(param_1,param_2,param_3,param_4);
local_78 = PTR_DAT_1401ac010;
FUN_140053d20((longlong *)&local_78,L"(%s): unexpected thread exit with (%s)",param_2,param_3);
piVar9 = (int *)0x0;
local_40 = 0;
local_38 = 0;
local_30 = 0;
local_28 = 0;
local_48 = Proud::ByteArray::vftable;
ppuVar11 = &local_78;
uVar10 = 1;
FUN_140078c10((longlong *)&local_res8,1,1,(longlong *)ppuVar11,(longlong)&local_48);
FUN_140078360(&local_48);
local_70 = (wchar_t *)0x0;
FUN_140078ae0((ulonglong *)&local_70,(ulonglong *)&local_res8,uVar10,ppuVar11);
pwVar5 = *(wchar_t **)(param_1 + 0x148);
ppwVar8 = &local_70;
(**(code **)(*(longlong *)pwVar5 + 0x38))();
if ((char)param_4 != '\0') {
if (local_res8 != (wchar_t *)0x0) {
piVar9 = *(int **)(local_res8 + 0x1c);
}
ppwVar8 = &local_70;
plVar4 = FUN_140078d30(piVar9,(longlong *)ppwVar8,uVar10,ppuVar11);
pwVar5 = (wchar_t *)*plVar4;
if ((wchar_t *)*plVar4 == (wchar_t *)0x0) {
pwVar5 = (wchar_t *)PTR_DAT_1401ac010;
}
FUN_14006c280(pwVar5);
pwVar7 = local_70;
if (((local_70 != (wchar_t *)0x0) && (local_70 != (wchar_t *)PTR_DAT_1401ac010)) &&
(pwVar1 = local_70 + -4, pwVar1 != (wchar_t *)0x0)) {
pwVar5 = (wchar_t *)FUN_14006cb70(pwVar5,ppwVar8,uVar10,ppuVar11);
local_58 = pwVar5;
FUN_14006b350((int *)pwVar5);
local_50 = 1;
pwVar7 = pwVar7 + -2;
*(int *)pwVar7 = *(int *)pwVar7 + -1;
if (*(int *)pwVar7 == 0) {
FUN_14006cc60(pwVar1);
}
FUN_14006b3e0((longlong)pwVar5);
}
}
pwVar7 = local_res8;
if (local_res8 != (wchar_t *)0x0) {
local_70 = local_res8;
FUN_14006b350((int *)local_res8);
local_68 = 1;
*(longlong *)(local_res8 + 0x20) = *(longlong *)(local_res8 + 0x20) + -1;
if (*(longlong *)(local_res8 + 0x20) == 0) {
FUN_14006b3e0((longlong)pwVar7);
local_68 = 0;
FUN_1400640e0((undefined4 *)local_res8,ppwVar8,uVar10,ppuVar11);
pwVar5 = local_res8;
}
else {
FUN_14006b3e0((longlong)pwVar7);
pwVar5 = pwVar7;
}
}
puVar3 = local_78;
if (((local_78 != (undefined *)0x0) && (local_78 != PTR_DAT_1401ac010)) &&
(puVar2 = local_78 + -8, puVar2 != (undefined *)0x0)) {
piVar6 = (int *)FUN_14006cb70(pwVar5,ppwVar8,uVar10,ppuVar11);
local_58 = (wchar_t *)piVar6;
FUN_14006b350(piVar6);
local_50 = 1;
piVar9 = (int *)(puVar3 + -4);
*piVar9 = *piVar9 + -1;
if (*piVar9 == 0) {
FUN_14006cc60(puVar2);
}
FUN_14006b3e0((longlong)piVar6);
}
}
return;
}