server-re/decomp/Agent_Release_x64/full/functions/0x14008b960.c
2026-10-14 16:45:19 -04:00

113 lines
3.6 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x14008b960 FUN_14008b960
* Pseudocode, not original source. */
void FUN_14008b960(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_140030200(param_1,param_2,param_3,param_4);
local_78 = PTR_DAT_140155010;
FUN_14001b7a0((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_14003c120((longlong *)&local_res8,1,1,(longlong *)ppuVar11,(longlong)&local_48);
FUN_14003b870(&local_48);
local_70 = (wchar_t *)0x0;
FUN_14003bff0((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_14003c240(piVar9,(longlong *)ppwVar8,uVar10,ppuVar11);
pwVar5 = (wchar_t *)*plVar4;
if ((wchar_t *)*plVar4 == (wchar_t *)0x0) {
pwVar5 = (wchar_t *)PTR_DAT_140155010;
}
FUN_14002fa10(pwVar5);
pwVar7 = local_70;
if (((local_70 != (wchar_t *)0x0) && (local_70 != (wchar_t *)PTR_DAT_140155010)) &&
(pwVar1 = local_70 + -4, pwVar1 != (wchar_t *)0x0)) {
pwVar5 = (wchar_t *)FUN_140030200(pwVar5,ppwVar8,uVar10,ppuVar11);
local_58 = pwVar5;
FUN_14002e6e0((int *)pwVar5);
local_50 = 1;
pwVar7 = pwVar7 + -2;
*(int *)pwVar7 = *(int *)pwVar7 + -1;
if (*(int *)pwVar7 == 0) {
FUN_1400302f0(pwVar1);
}
FUN_14002e770((longlong)pwVar5);
}
}
pwVar7 = local_res8;
if (local_res8 != (wchar_t *)0x0) {
local_70 = local_res8;
FUN_14002e6e0((int *)local_res8);
local_68 = 1;
*(longlong *)(local_res8 + 0x20) = *(longlong *)(local_res8 + 0x20) + -1;
if (*(longlong *)(local_res8 + 0x20) == 0) {
FUN_14002e770((longlong)pwVar7);
local_68 = 0;
FUN_14002b500((undefined4 *)local_res8,ppwVar8,uVar10,ppuVar11);
pwVar5 = local_res8;
}
else {
FUN_14002e770((longlong)pwVar7);
pwVar5 = pwVar7;
}
}
puVar3 = local_78;
if (((local_78 != (undefined *)0x0) && (local_78 != PTR_DAT_140155010)) &&
(puVar2 = local_78 + -8, puVar2 != (undefined *)0x0)) {
piVar6 = (int *)FUN_140030200(pwVar5,ppwVar8,uVar10,ppuVar11);
local_58 = (wchar_t *)piVar6;
FUN_14002e6e0(piVar6);
local_50 = 1;
piVar9 = (int *)(puVar3 + -4);
*piVar9 = *piVar9 + -1;
if (*piVar9 == 0) {
FUN_1400302f0(puVar2);
}
FUN_14002e770((longlong)piVar6);
}
}
return;
}