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

72 lines
2.1 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400bec50 FUN_1400bec50
* Pseudocode, not original source. */
void FUN_1400bec50(longlong *param_1,longlong param_2,undefined8 param_3,longlong param_4)
{
char cVar1;
int iVar2;
longlong lVar3;
longlong lVar4;
int iVar5;
ulonglong uVar6;
longlong lVar7;
longlong *plVar8;
uint uVar9;
longlong lVar10;
int iVar11;
exception local_68 [80];
cVar1 = (**(code **)(*param_1 + 0x90))();
if (cVar1 != '\0') {
FUN_14006ba50(local_68,(wchar_t *)PTR_u_Already_async_callback_may_occur_1401ad7a8,param_3,
param_4);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_68,(ThrowInfo *)&DAT_1401a93e8);
}
uVar9 = *(uint *)(param_1 + 4);
uVar6 = 0;
lVar7 = 0;
if (0 < (int)uVar9) {
plVar8 = param_1 + 1;
while( true ) {
if ((lVar7 < 0) || (iVar5 = (int)uVar6, (int)param_1[4] <= iVar5)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(uVar6,lVar7,(ulonglong)uVar9,param_4);
}
if (*(longlong *)(param_1[3] + lVar7 * 8) == param_2) break;
uVar6 = (ulonglong)(iVar5 + 1U);
lVar7 = lVar7 + 1;
if ((int)uVar9 <= (int)(iVar5 + 1U)) {
return;
}
}
if (iVar5 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
iVar2 = (int)param_1[4] - iVar5;
iVar11 = 1;
if (iVar2 < 2) {
iVar11 = iVar2;
}
uVar9 = ((int)param_1[4] - iVar11) - iVar5;
uVar6 = (ulonglong)uVar9;
if (0 < (int)uVar9) {
lVar10 = (longlong)(int)uVar9;
lVar7 = lVar7 * 8;
do {
lVar3 = FUN_14007a110((longlong)plVar8);
lVar4 = FUN_14007a110((longlong)plVar8);
*(undefined8 *)(lVar4 + lVar7) = *(undefined8 *)((longlong)iVar11 * 8 + lVar3 + lVar7);
lVar7 = lVar7 + 8;
lVar10 = lVar10 + -1;
} while (lVar10 != 0);
}
FUN_1400cc980((longlong)plVar8,(int)param_1[4] - iVar11,uVar6,param_4);
*(undefined8 *)(param_2 + 8) = 0;
}
return;
}