server-re/decomp/AgentManager_Release_x64/full/functions/0x14004bd20.c
2026-10-15 09:58:24 -04:00

108 lines
2.8 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x14004bd20 FUN_14004bd20
* Pseudocode, not original source. */
void FUN_14004bd20(undefined8 *param_1,longlong param_2,longlong param_3)
{
ulonglong uVar1;
undefined8 *puVar2;
longlong lVar3;
undefined8 *puVar4;
int iVar5;
undefined8 *puVar6;
longlong lVar7;
if (param_2 < 0) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
if (-1 < param_3) {
param_1[3] = param_3;
}
if (param_2 == 0) {
if ((100 < (ulonglong)param_1[2]) && ((void *)*param_1 != (void *)0x0)) {
operator_delete__((void *)*param_1);
*param_1 = 0;
}
param_1[1] = 0;
param_1[2] = 100;
return;
}
uVar1 = param_1[2];
if ((longlong)uVar1 < param_2) {
lVar3 = param_1[3];
if (lVar3 == 0) {
lVar3 = (longlong)(param_1[1] + (ulonglong)((uint)((longlong)param_1[1] >> 0x3f) & 7)) >> 3;
if (lVar3 < 4) {
lVar3 = 4;
}
else if (0x400 < lVar3) {
lVar3 = 0x400;
}
}
lVar7 = param_2;
if (param_2 < (longlong)(lVar3 + uVar1)) {
lVar7 = lVar3 + uVar1;
}
if (lVar7 < (longlong)uVar1) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
puVar4 = operator_new(lVar7 << 5);
puVar2 = param_1 + 4;
if (100 < (ulonglong)param_1[2]) {
puVar2 = (undefined8 *)*param_1;
}
FUN_14004abf0(puVar4,(longlong)puVar2,param_1[1]);
memset(puVar4 + param_1[1] * 4,0,(param_2 - param_1[1]) * 0x20);
iVar5 = 0;
lVar3 = param_2 - param_1[1];
if (0 < lVar3) {
puVar6 = puVar4 + param_1[1] * 4 + 3;
do {
if (puVar6 + -3 != (undefined8 *)0x0) {
*(undefined4 *)(puVar6 + -3) = 0;
puVar6[-2] = 0;
*puVar6 = 0;
puVar6[-1] = 0;
}
iVar5 = iVar5 + 1;
puVar6 = puVar6 + 4;
} while (iVar5 < lVar3);
}
if (100 < (ulonglong)param_1[2]) {
operator_delete__(puVar2);
}
*param_1 = puVar4;
param_1[2] = lVar7;
}
else {
puVar2 = param_1 + 4;
if (100 < uVar1) {
puVar2 = (undefined8 *)*param_1;
}
lVar3 = param_1[1];
if (lVar3 < param_2) {
iVar5 = 0;
if (0 < param_2 - lVar3) {
puVar2 = puVar2 + lVar3 * 4 + 3;
do {
if (puVar2 + -3 != (undefined8 *)0x0) {
*(undefined4 *)(puVar2 + -3) = 0;
puVar2[-2] = 0;
*puVar2 = 0;
puVar2[-1] = 0;
}
iVar5 = iVar5 + 1;
puVar2 = puVar2 + 4;
} while ((longlong)iVar5 < param_2 - lVar3);
param_1[1] = param_2;
return;
}
}
}
param_1[1] = param_2;
return;
}