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

225 lines
6 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x1400e3220 FUN_1400e3220
* Pseudocode, not original source. */
ulonglong FUN_1400e3220(longlong param_1,uint param_2,char *param_3,uint *param_4,int param_5)
{
uint *puVar1;
undefined4 uVar2;
int iVar3;
undefined4 extraout_var;
ulonglong uVar4;
undefined4 extraout_var_00;
undefined4 extraout_var_01;
undefined4 extraout_var_02;
uint uVar5;
uint uVar6;
undefined8 *puVar7;
uint local_28;
uint local_24;
uint local_20;
if (((param_1 == 0) || (param_3 == (char *)0x0)) || (param_4 == (uint *)0x0)) {
return 0x10;
}
uVar5 = 0;
local_20 = 0;
if (param_2 != 0) {
puVar7 = (undefined8 *)(param_1 + 8);
do {
uVar6 = *(uint *)(puVar7 + 1);
puVar1 = (uint *)*puVar7;
if (*(int *)(puVar7 + -1) == 0) break;
switch(*(int *)(puVar7 + -1)) {
case 1:
uVar4 = FUN_1400e31c0(&local_28);
break;
case 2:
uVar4 = FUN_1400e2f30((longlong)puVar1,(int *)&local_28);
break;
case 3:
uVar2 = FUN_1400e2e80(*puVar1,(int *)&local_28);
uVar4 = CONCAT44(extraout_var,uVar2);
break;
case 4:
uVar4 = FUN_1400e2cd0((ulonglong)uVar6,(int *)&local_28);
break;
case 5:
uVar4 = FUN_1400e2b80(uVar6,(int *)&local_28);
break;
case 6:
uVar5 = uVar5 + 2;
goto LAB_1400e336f;
case 7:
uVar4 = FUN_1400e28d0(puVar1,uVar6,(int *)&local_28);
break;
case 8:
uVar4 = FUN_1400e26f0((byte *)puVar1,uVar6,(int *)&local_28);
break;
case 9:
uVar4 = FUN_1400e24b0((byte *)puVar1,uVar6,(int *)&local_28);
break;
case 10:
uVar4 = FUN_1400e21a0((ushort *)puVar1,uVar6,(int *)&local_28);
break;
case 0xb:
uVar4 = FUN_1400e41a0((longlong)puVar1,&local_28);
break;
default:
goto LAB_1400e3697;
case 0xd:
case 0xe:
case 0xf:
uVar4 = FUN_1400e1c20((longlong)puVar1,uVar6,(int *)&local_28);
}
if ((int)uVar4 != 0) {
return uVar4;
}
uVar5 = uVar5 + local_28;
LAB_1400e336f:
puVar7 = puVar7 + 7;
local_20 = local_20 + 1;
} while (local_20 < param_2);
}
if (uVar5 < 0x80) {
uVar6 = uVar5 + 2;
}
else if (uVar5 < 0x100) {
uVar6 = uVar5 + 3;
}
else if (uVar5 < 0x10000) {
uVar6 = uVar5 + 4;
}
else {
if (0xffffff < uVar5) {
LAB_1400e3697:
return 0x10;
}
uVar6 = uVar5 + 5;
}
if (*param_4 < uVar6) {
*param_4 = uVar6;
return 6;
}
*param_3 = (param_5 != 0xd) + '0';
uVar6 = 1;
uVar4 = 1;
local_28 = 1;
if (uVar5 < 0x80) {
param_3[1] = (char)uVar5;
local_28 = uVar6;
}
else {
if (uVar5 < 0x100) {
param_3[1] = -0x7f;
local_28 = uVar6;
}
else {
if (uVar5 < 0x10000) {
param_3[1] = -0x7e;
local_28 = uVar6;
}
else {
if (0xffffff < uVar5) goto LAB_1400e3474;
param_3[1] = -0x7d;
local_28 = 2;
param_3[2] = (char)(uVar5 >> 0x10);
}
local_28 = local_28 + 1;
param_3[local_28] = (char)(uVar5 >> 8);
}
local_28 = local_28 + 1;
param_3[local_28] = (char)uVar5;
}
local_28 = local_28 + 1;
uVar4 = (ulonglong)local_28;
LAB_1400e3474:
*param_4 = *param_4 - (int)uVar4;
uVar5 = 0;
if (param_2 != 0) {
puVar7 = (undefined8 *)(param_1 + 8);
do {
iVar3 = *(int *)(puVar7 + -1);
uVar6 = *(uint *)(puVar7 + 1);
puVar1 = (uint *)*puVar7;
if (iVar3 == 0) break;
switch(iVar3) {
case 1:
local_24 = *param_4;
uVar4 = FUN_1400e5700(*puVar1,(undefined2 *)(param_3 + uVar4),&local_24);
break;
case 2:
local_24 = *param_4;
uVar4 = FUN_1400e5460((longlong)puVar1,param_3 + uVar4,&local_24);
break;
case 3:
local_24 = *param_4;
iVar3 = FUN_1400e5340(*puVar1,param_3 + uVar4,&local_24);
uVar4 = CONCAT44(extraout_var_00,iVar3);
break;
case 4:
local_24 = *param_4;
uVar4 = FUN_1400e51d0((char *)puVar1,uVar6,param_3 + uVar4,&local_24);
break;
case 5:
local_24 = *param_4;
uVar4 = FUN_1400e50a0((undefined1 *)puVar1,uVar6,param_3 + uVar4,&local_24);
break;
case 6:
param_3[uVar4] = '\x05';
param_3[local_28 + 1] = '\0';
local_28 = local_28 + 2;
*param_4 = *param_4 - 2;
goto LAB_1400e3669;
case 7:
local_24 = *param_4;
uVar4 = FUN_1400e4e40(puVar1,uVar6,param_3 + uVar4,&local_24);
break;
case 8:
local_24 = *param_4;
uVar4 = FUN_1400e4d10((byte *)puVar1,uVar6,param_3 + uVar4,&local_24);
break;
case 9:
local_24 = *param_4;
uVar4 = FUN_1400e4be0((byte *)puVar1,uVar6,param_3 + uVar4,&local_24);
break;
case 10:
local_24 = *param_4;
uVar4 = FUN_1400e49e0((ushort *)puVar1,uVar6,param_3 + uVar4,&local_24);
break;
case 0xb:
local_24 = *param_4;
uVar4 = FUN_1400e4650(puVar1,param_3 + uVar4,&local_24);
break;
default:
goto LAB_1400e3697;
case 0xd:
local_24 = *param_4;
uVar4 = FUN_1400e3220((longlong)puVar1,uVar6,param_3 + uVar4,&local_24,iVar3);
break;
case 0xe:
local_24 = *param_4;
uVar2 = FUN_1400e4550((undefined8 *)puVar1,uVar6,param_3 + uVar4,&local_24);
uVar4 = CONCAT44(extraout_var_01,uVar2);
break;
case 0xf:
local_24 = *param_4;
iVar3 = FUN_1400e4260((int *)puVar1,uVar6,param_3 + uVar4,&local_24);
uVar4 = CONCAT44(extraout_var_02,iVar3);
}
if ((int)uVar4 != 0) {
return uVar4;
}
local_28 = local_28 + local_24;
*param_4 = *param_4 - local_24;
LAB_1400e3669:
uVar4 = (ulonglong)local_28;
puVar7 = puVar7 + 7;
uVar5 = uVar5 + 1;
} while (uVar5 < param_2);
}
*param_4 = (uint)uVar4;
return 0;
}