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

73 lines
1.9 KiB
C

/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
* Ghidra 12.1.2 decompiler output for 0x1400d44c0 FUN_1400d44c0
* Pseudocode, not original source. */
undefined8 FUN_1400d44c0(char *param_1,uint param_2,undefined1 *param_3,uint *param_4)
{
undefined8 uVar1;
undefined1 uVar2;
uint uVar3;
byte bVar4;
uint uVar5;
ulonglong uVar6;
uint uVar7;
byte *pbVar8;
uint local_res8 [2];
if (((param_1 != (char *)0x0) && (param_3 != (undefined1 *)0x0)) && (param_4 != (uint *)0x0)) {
uVar1 = FUN_1400d1fc0((ulonglong)param_2,(int *)local_res8);
if ((int)uVar1 == 0) {
if (*param_4 < local_res8[0]) {
*param_4 = local_res8[0];
return 6;
}
uVar7 = 0;
*param_3 = 3;
uVar5 = 1;
uVar3 = ((param_2 & 7) != 0) + 1 + (param_2 >> 3);
uVar2 = (undefined1)uVar3;
if (uVar3 < 0x80) {
param_3[1] = uVar2;
uVar5 = 2;
}
else if (uVar3 < 0x100) {
param_3[1] = 0x81;
uVar5 = 3;
param_3[2] = uVar2;
}
else if (uVar3 < 0x10000) {
param_3[1] = 0x82;
uVar5 = 4;
param_3[2] = (char)(uVar3 >> 8);
param_3[3] = uVar2;
}
uVar6 = (ulonglong)(uVar5 + 1);
bVar4 = 0;
param_3[uVar5] = -(char)param_2 & 7;
if (param_2 != 0) {
pbVar8 = param_3 + (int)(uVar5 + 1);
do {
bVar4 = bVar4 | (*param_1 != '\0') << (7U - (char)(uVar7 & 7) & 0x1f);
if ((uVar7 & 7) == 7) {
*pbVar8 = bVar4;
pbVar8 = pbVar8 + 1;
uVar6 = (ulonglong)((int)uVar6 + 1);
bVar4 = 0;
}
uVar7 = uVar7 + 1;
param_1 = param_1 + 1;
} while (uVar7 < param_2);
}
if ((param_2 & 7) != 0) {
param_3[uVar6] = bVar4;
uVar6 = (ulonglong)((int)uVar6 + 1);
}
*param_4 = (uint)uVar6;
uVar1 = 0;
}
return uVar1;
}
return 0x10;
}