101 lines
3 KiB
C
101 lines
3 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401a9fc0 FUN_1401a9fc0
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1401a9fc0(longlong param_1,undefined8 param_2,undefined8 param_3,char param_4)
|
|
|
|
{
|
|
undefined *puVar1;
|
|
int *piVar2;
|
|
longlong *plVar3;
|
|
undefined8 uVar4;
|
|
undefined *puVar5;
|
|
undefined *local_res8;
|
|
undefined *local_78;
|
|
undefined *local_70;
|
|
undefined1 local_68;
|
|
undefined8 local_60;
|
|
undefined8 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_14016d8c0();
|
|
local_78 = PTR_DAT_1403440a0;
|
|
FUN_14004c020(&local_78,L"(%s): unexpected thread exit with (%s)",param_2,param_3);
|
|
uVar4 = 0;
|
|
local_40 = 0;
|
|
local_38 = 0;
|
|
local_30 = 0;
|
|
local_28 = 0;
|
|
local_48 = Proud::ByteArray::vftable;
|
|
FUN_140198f80(&local_res8,1,1,&local_78,&local_48);
|
|
FUN_14019a9e0(&local_48);
|
|
local_70 = (undefined *)0x0;
|
|
FUN_140184b90(&local_70,&local_res8);
|
|
(**(code **)(**(longlong **)(param_1 + 0x148) + 0x38))
|
|
(*(longlong **)(param_1 + 0x148),&local_70);
|
|
if (param_4 != '\0') {
|
|
if (local_res8 != (undefined *)0x0) {
|
|
uVar4 = *(undefined8 *)(local_res8 + 0x38);
|
|
}
|
|
plVar3 = (longlong *)FUN_1401990a0(uVar4,&local_70);
|
|
puVar5 = (undefined *)*plVar3;
|
|
if ((undefined *)*plVar3 == (undefined *)0x0) {
|
|
puVar5 = PTR_DAT_1403440a0;
|
|
}
|
|
FUN_14016f090(puVar5);
|
|
puVar5 = local_70;
|
|
if (((local_70 != (undefined *)0x0) && (local_70 != PTR_DAT_1403440a0)) &&
|
|
(puVar1 = local_70 + -8, puVar1 != (undefined *)0x0)) {
|
|
uVar4 = FUN_14016d8c0();
|
|
local_58 = uVar4;
|
|
FUN_14016db50(uVar4);
|
|
local_50 = 1;
|
|
piVar2 = (int *)(puVar5 + -4);
|
|
*piVar2 = *piVar2 + -1;
|
|
if (*piVar2 == 0) {
|
|
FUN_14016d970(puVar1);
|
|
}
|
|
FUN_14016dbe0(uVar4);
|
|
}
|
|
}
|
|
puVar5 = local_res8;
|
|
if (local_res8 != (undefined *)0x0) {
|
|
local_70 = local_res8;
|
|
FUN_14016db50(local_res8);
|
|
local_68 = 1;
|
|
*(longlong *)(local_res8 + 0x40) = *(longlong *)(local_res8 + 0x40) + -1;
|
|
if (*(longlong *)(local_res8 + 0x40) == 0) {
|
|
FUN_14016dbe0(puVar5);
|
|
local_68 = 0;
|
|
FUN_140154a90(local_res8);
|
|
}
|
|
else {
|
|
FUN_14016dbe0(puVar5);
|
|
}
|
|
}
|
|
puVar5 = local_78;
|
|
if (((local_78 != (undefined *)0x0) && (local_78 != PTR_DAT_1403440a0)) &&
|
|
(puVar1 = local_78 + -8, puVar1 != (undefined *)0x0)) {
|
|
uVar4 = FUN_14016d8c0();
|
|
local_58 = uVar4;
|
|
FUN_14016db50(uVar4);
|
|
local_50 = 1;
|
|
piVar2 = (int *)(puVar5 + -4);
|
|
*piVar2 = *piVar2 + -1;
|
|
if (*piVar2 == 0) {
|
|
FUN_14016d970(puVar1);
|
|
}
|
|
FUN_14016dbe0(uVar4);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|