server-re/decomp/DBCServer_Release_x64/full/functions/0x14016d5d0.c

54 lines
1.5 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x14016d5d0 FUN_14016d5d0
* Pseudocode, not original source. */
exception *
FUN_14016d5d0(exception *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)
{
undefined8 *puVar1;
longlong lVar2;
longlong *plVar3;
longlong *local_res10;
undefined8 uVar4;
uVar4 = 0xfffffffffffffffe;
std::exception::exception(param_1);
*(undefined ***)param_1 = Proud::Exception::vftable;
FUN_14016d8c0();
*(undefined **)(param_1 + 0x40) = PTR_DAT_140344098;
plVar3 = (longlong *)FUN_1400010e0(param_2,&local_res10,param_3,param_4,uVar4);
puVar1 = (undefined8 *)*plVar3;
if (puVar1 == (undefined8 *)0x0) {
uVar4 = 0;
}
else {
if (puVar1[1] == 0) {
uVar4 = FUN_140218460(*puVar1);
puVar1[1] = uVar4;
}
uVar4 = puVar1[1];
}
FUN_14016bfb0(param_1 + 0x40,uVar4);
if (local_res10 != (longlong *)0x0) {
LOCK();
plVar3 = local_res10 + 2;
lVar2 = *plVar3;
*(int *)plVar3 = (int)*plVar3 + -1;
UNLOCK();
if (((int)lVar2 == 1) && (local_res10 != (longlong *)0x0)) {
if (*local_res10 != 0) {
Ordinal_6();
}
if ((void *)local_res10[1] != (void *)0x0) {
operator_delete__((void *)local_res10[1]);
}
operator_delete(local_res10);
}
}
*(undefined8 *)(param_1 + 0x30) = param_2;
*(undefined4 *)(param_1 + 0x18) = 0;
*(undefined4 *)(param_1 + 0x38) = 3;
return param_1;
}