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

68 lines
2.1 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x14004ffa0 FUN_14004ffa0
* Pseudocode, not original source. */
/* WARNING: Removing unreachable block (ram,0x00014005003e) */
longlong * FUN_14004ffa0(longlong param_1,longlong *param_2,uint param_3,uint param_4)
{
longlong *plVar1;
ulonglong uVar2;
uint *puVar3;
undefined8 *puVar4;
uint uVar5;
undefined8 *local_res8;
puVar4 = (undefined8 *)0x0;
local_res8 = (undefined8 *)0x0;
uVar5 = param_3;
if ((int)param_4 < (int)param_3) {
uVar5 = param_4;
param_4 = param_3;
}
uVar2 = (ulonglong)(uVar5 << 0x10 ^ param_4) % (ulonglong)*(uint *)(param_1 + 0x28);
if (*(longlong *)(param_1 + 8) != 0) {
puVar3 = *(uint **)(*(longlong *)(param_1 + 8) + uVar2 * 8);
while( true ) {
if ((puVar3 == (uint *)0x0) || ((uint)uVar2 != puVar3[8] % *(uint *)(param_1 + 0x28)))
goto LAB_1400500d3;
if ((*puVar3 == uVar5) && (puVar3[1] == param_4)) break;
puVar3 = *(uint **)(puVar3 + 4);
}
if (puVar3 != (uint *)0x0) {
if (*(longlong *)(puVar3 + 2) != 0) {
*(longlong *)(*(longlong *)(puVar3 + 2) + 8) =
*(longlong *)(*(longlong *)(puVar3 + 2) + 8) + 1;
local_res8 = *(undefined8 **)(puVar3 + 2);
}
*param_2 = 0;
if (local_res8 != (undefined8 *)0x0) {
local_res8[1] = local_res8[1] + 1;
if ((*param_2 != 0) &&
(*(longlong *)(*param_2 + 8) = *(longlong *)(*param_2 + 8) + -1,
*(longlong *)(*param_2 + 8) == 0)) {
puVar4 = (undefined8 *)*param_2;
}
*param_2 = (longlong)local_res8;
if (puVar4 != (undefined8 *)0x0) {
FUN_140041080(puVar4);
}
}
if (local_res8 == (undefined8 *)0x0) {
return param_2;
}
plVar1 = local_res8 + 1;
*plVar1 = *plVar1 + -1;
if (*plVar1 != 0) {
return param_2;
}
FUN_140041080(local_res8);
return param_2;
}
}
LAB_1400500d3:
*param_2 = 0;
return param_2;
}