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

84 lines
2.3 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x1400cd110 FUN_1400cd110
* Pseudocode, not original source. */
ulonglong FUN_1400cd110(uint *param_1,uint param_2,uint *param_3,uint *param_4)
{
undefined4 uVar1;
ulonglong uVar2;
ulonglong uVar3;
uint uVar4;
longlong lVar5;
uint local_28 [2];
uint local_20;
longlong local_18;
uVar2 = (ulonglong)param_2;
if (param_2 == 0) {
return 0xfffffffd;
}
if ((param_2 == 1) || (*param_1 == 0)) {
if (param_4 != (uint *)0x0) {
*param_4 = 0;
}
if (param_3 != (uint *)0x0) {
uVar2 = FUN_1400c6e70(param_1,param_3);
return uVar2;
}
}
else {
if ((param_2 & param_2 - 1) == 0) {
uVar4 = 0;
do {
if (param_2 == 1 << ((byte)uVar4 & 0x1f)) {
if (param_4 != (uint *)0x0) {
*param_4 = (1 << ((byte)uVar4 & 0x1f)) - 1U & **(uint **)(param_1 + 4);
}
if (param_3 == (uint *)0x0) {
return 0;
}
uVar2 = FUN_1400cd2c0(param_1,uVar4,param_3,(undefined8 *)0x0);
return uVar2;
}
uVar4 = uVar4 + 1;
} while ((int)uVar4 < 0x1c);
}
if (param_2 == 3) {
uVar2 = FUN_1400d2ce0(param_1,(undefined8 *)param_3,param_4);
return uVar2;
}
uVar3 = FUN_1400cf070(local_28,*param_1);
if ((int)uVar3 != 0) {
return uVar3;
}
local_28[0] = *param_1;
local_20 = param_1[2];
uVar3 = 0;
lVar5 = (longlong)(int)(local_28[0] - 1);
if (-1 < (int)(local_28[0] - 1)) {
do {
uVar3 = (ulonglong)*(uint *)(*(longlong *)(param_1 + 4) + lVar5 * 4) | uVar3 << 0x1c;
if (uVar3 < uVar2) {
uVar1 = 0;
}
else {
uVar1 = (undefined4)(uVar3 / uVar2);
uVar3 = uVar3 - (uVar3 / uVar2 & 0xffffffff) * uVar2;
}
lVar5 = lVar5 + -1;
*(undefined4 *)(local_18 + 4 + lVar5 * 4) = uVar1;
} while (-1 < lVar5);
}
if (param_4 != (uint *)0x0) {
*param_4 = (uint)uVar3;
}
if (param_3 != (uint *)0x0) {
FUN_1400ccef0((int *)local_28);
FUN_1400cef30((undefined8 *)local_28,(undefined8 *)param_3);
}
FUN_1400c6dd0((int *)local_28);
}
return 0;
}