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

73 lines
2.1 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400b3670 FUN_1400b3670
* Pseudocode, not original source. */
void FUN_1400b3670(longlong *param_1,uint param_2)
{
longlong lVar1;
void *pvVar2;
int *piVar3;
longlong *plVar4;
longlong lVar5;
longlong lVar6;
longlong *local_res8;
piVar3 = (int *)(**(code **)(param_1[-0xe] + 0x58))(param_1 + -0xe);
FUN_14006b350(piVar3);
(**(code **)(*param_1 + 0x100))(param_1);
FUN_1400b3430(param_1 + -0xe,(longlong *)&local_res8,param_2);
if ((local_res8 == (longlong *)0x0) || (lVar1 = *local_res8, lVar1 == 0)) {
(**(code **)(*param_1 + 0xf8))(param_1);
if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0))
{
pvVar2 = (void *)*local_res8;
if (pvVar2 != (void *)0x0) {
FUN_14007d170((char *)((longlong)pvVar2 + 8));
operator_delete(pvVar2);
}
FUN_14006cc60(local_res8);
}
FUN_14006b3e0((longlong)piVar3);
}
else {
plVar4 = local_res8;
if (*(longlong *)(lVar1 + 0x28) == 0) {
lVar6 = 0;
}
else {
lVar6 = *(longlong *)(lVar1 + 0x18);
}
while( true ) {
if (plVar4 == (longlong *)0x0) {
lVar5 = 0;
}
else {
lVar5 = *plVar4;
}
if (lVar6 == 0) break;
if (*(longlong **)(lVar6 + 8) != (longlong *)0x0) {
(**(code **)(**(longlong **)(lVar6 + 8) + 0x10))();
plVar4 = local_res8;
}
lVar6 = *(longlong *)(lVar6 + 0x10);
}
if (lVar1 + 8 != lVar5 + 8) {
/* WARNING: Subroutine does not return */
FUN_1400064e0(0x80004005);
}
FUN_140076f50((char *)(param_1 + 0x2b6));
if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0))
{
pvVar2 = (void *)*local_res8;
if (pvVar2 != (void *)0x0) {
FUN_14007d170((char *)((longlong)pvVar2 + 8));
operator_delete(pvVar2);
}
FUN_14006cc60(local_res8);
}
FUN_14006b3e0((longlong)piVar3);
}
return;
}