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

229 lines
6.7 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x1400daa10 FUN_1400daa10
* Pseudocode, not original source. */
ulonglong FUN_1400daa10(char *param_1,uint param_2,longlong param_3,uint param_4,int param_5)
{
byte bVar1;
uint *puVar2;
undefined4 uVar3;
undefined4 *puVar4;
undefined4 extraout_var;
undefined4 extraout_var_00;
int *piVar5;
uint uVar6;
ulonglong uVar7;
byte *pbVar8;
longlong lVar9;
bool bVar10;
uint local_res8;
int iVar11;
uint local_38;
uint local_34;
uint local_30;
uint local_2c;
longlong local_28;
uVar7 = (ulonglong)param_4;
if ((param_1 == (char *)0x0) || (param_3 == 0)) {
return 0x10;
}
if ((param_2 < 2) || ((*param_1 != '0' && (*param_1 != '1')))) {
return 7;
}
bVar1 = param_1[1];
local_34 = 1;
if (bVar1 < 0x80) {
local_res8 = (uint)bVar1;
local_34 = 2;
}
else if ((char)bVar1 < '\0') {
if (bVar1 < 0x81) {
return 7;
}
if (0x83 < bVar1) {
return 7;
}
uVar6 = bVar1 & 0x7f;
local_34 = 2;
if (param_2 < uVar6 + 2) {
return 7;
}
local_res8 = 0;
if ((bVar1 & 0x7f) != 0) {
pbVar8 = (byte *)(param_1 + 2);
local_34 = uVar6 + 2;
do {
bVar1 = *pbVar8;
pbVar8 = pbVar8 + 1;
local_res8 = local_res8 << 8 | (uint)bVar1;
uVar6 = uVar6 - 1;
} while (uVar6 != 0);
}
}
else {
local_res8 = (uint)param_1;
}
if (param_2 < local_res8 + local_34) {
return 7;
}
if (param_4 != 0) {
puVar4 = (undefined4 *)(param_3 + 0x14);
do {
*puVar4 = 0;
puVar4 = puVar4 + 0xe;
uVar7 = uVar7 - 1;
} while (uVar7 != 0);
}
local_30 = 0;
local_28 = 0;
if (param_4 != 0) {
do {
lVar9 = local_28 * 0x38;
local_2c = *(uint *)(lVar9 + 0x10 + param_3);
iVar11 = *(int *)(lVar9 + param_3);
puVar2 = *(uint **)(lVar9 + 8 + param_3);
if ((param_5 == 0) && (*(int *)(lVar9 + 0x14 + param_3) == 1)) goto LAB_1400dac10;
if (iVar11 == 0) break;
local_38 = local_res8;
switch(iVar11) {
case 1:
uVar7 = FUN_1400e31e0(param_1 + local_34,local_res8,puVar2);
if ((int)uVar7 != 0) {
return uVar7;
}
uVar7 = FUN_1400e31c0(&local_38);
break;
case 2:
uVar7 = FUN_1400e3030((byte *)(param_1 + local_34),local_res8,(longlong)puVar2);
if ((int)uVar7 == 0) {
uVar7 = FUN_1400e2f30((longlong)puVar2,(int *)&local_38);
break;
}
goto LAB_1400dabf4;
case 3:
uVar7 = FUN_1400e2ed0((byte *)(param_1 + local_34),local_res8,puVar2);
if ((int)uVar7 != 0) goto LAB_1400dabf4;
uVar3 = FUN_1400e2e80(*puVar2,(int *)&local_38);
uVar7 = CONCAT44(extraout_var,uVar3);
break;
case 4:
uVar7 = FUN_1400e2d20((byte *)(param_1 + local_34),local_res8,(longlong)puVar2,&local_2c);
if ((int)uVar7 != 0) goto LAB_1400dabf4;
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
uVar7 = FUN_1400e2cd0((ulonglong)local_2c,(int *)&local_38);
break;
case 5:
uVar7 = FUN_1400e2bd0((byte *)(param_1 + local_34),local_res8,(byte *)puVar2,&local_2c);
if ((int)uVar7 != 0) goto LAB_1400dabf4;
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
uVar7 = FUN_1400e2b80(local_2c,(int *)&local_38);
break;
case 6:
if (((local_res8 < 2) || (param_1[local_34] != '\x05')) || (param_1[local_34 + 1] != '\0'))
{
if (param_5 != 0) {
return 7;
}
goto LAB_1400dac10;
}
local_38 = 2;
goto LAB_1400dabb8;
case 7:
uVar7 = FUN_1400e2a00((byte *)(param_1 + local_34),local_res8,puVar2,&local_2c);
if ((int)uVar7 != 0) goto LAB_1400dabf4;
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
uVar7 = FUN_1400e28d0(puVar2,local_2c,(int *)&local_38);
break;
case 8:
uVar7 = FUN_1400e2790((byte *)(param_1 + local_34),local_res8,(undefined1 *)puVar2,&local_2c
);
if ((int)uVar7 != 0) goto LAB_1400dabf4;
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
uVar7 = FUN_1400e26f0((byte *)puVar2,local_2c,(int *)&local_38);
break;
case 9:
uVar7 = FUN_1400e2550((byte *)(param_1 + local_34),local_res8,(undefined1 *)puVar2,&local_2c
);
if ((int)uVar7 != 0) goto LAB_1400dabf4;
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
uVar7 = FUN_1400e24b0((byte *)puVar2,local_2c,(int *)&local_38);
break;
case 10:
uVar7 = FUN_1400e22b0((byte *)(param_1 + local_34),local_res8,(ushort *)puVar2,&local_2c);
if ((int)uVar7 != 0) goto LAB_1400dabf4;
*(uint *)(lVar9 + 0x10 + param_3) = local_2c;
uVar7 = FUN_1400e21a0((ushort *)puVar2,local_2c,(int *)&local_38);
break;
case 0xb:
iVar11 = FUN_1400e1ea0((longlong)(param_1 + local_34),&local_38,puVar2);
uVar7 = CONCAT44(extraout_var_00,iVar11);
goto joined_r0x0001400daeb6;
case 0xc:
uVar7 = FUN_1400e18b0((byte *)(param_1 + local_34),&local_38,(longlong)puVar2,local_2c);
iVar11 = (int)uVar7;
joined_r0x0001400daeb6:
if (iVar11 == 0) goto LAB_1400dabb8;
LAB_1400dabf4:
if (param_5 != 0) {
return uVar7;
}
goto LAB_1400dac10;
case 0xd:
case 0xf:
if (iVar11 == 0xf) {
bVar10 = (param_1[local_34] & 0x3fU) == 0x31;
LAB_1400dae92:
if (!bVar10) {
return 7;
}
}
else if (iVar11 == 0xd) {
bVar10 = (param_1[local_34] & 0x3fU) == 0x30;
goto LAB_1400dae92;
}
iVar11 = 1;
goto LAB_1400dae34;
case 0xe:
iVar11 = 0;
LAB_1400dae34:
uVar7 = FUN_1400daa10(param_1 + local_34,local_res8,(longlong)puVar2,local_2c,iVar11);
if ((int)uVar7 == 0) {
uVar7 = FUN_1400e1c20((longlong)puVar2,local_2c,(int *)&local_38);
break;
}
goto LAB_1400dabf4;
default:
return 0x10;
}
if ((int)uVar7 != 0) {
return uVar7;
}
LAB_1400dabb8:
local_34 = local_34 + local_38;
local_res8 = local_res8 - local_38;
*(undefined4 *)(lVar9 + 0x14 + param_3) = 1;
if (param_5 == 0) {
local_30 = 0xffffffff;
local_28 = -1;
}
LAB_1400dac10:
local_30 = local_30 + 1;
local_28 = local_28 + 1;
} while (local_30 < param_4);
}
uVar6 = 0;
if (param_4 != 0) {
piVar5 = (int *)(param_3 + 0x14);
do {
if (*piVar5 == 0) {
return 7;
}
uVar6 = uVar6 + 1;
piVar5 = piVar5 + 0xe;
} while (uVar6 < param_4);
}
return 0;
}