server-re/decomp/MessageServer_Release_x64/full/functions/0x14010af90.c

112 lines
3 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14010af90 FUN_14010af90
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_14010af90(int *param_1,int *param_2)
{
int iVar1;
longlong lVar2;
uint uVar3;
uint uVar4;
undefined8 uVar5;
int iVar6;
uint *puVar7;
uint *puVar8;
int iVar9;
ulonglong uVar10;
ulonglong uVar11;
ulonglong uVar12;
int iVar13;
longlong lVar14;
ulonglong uVar15;
ulonglong uVar16;
ulonglong uVar17;
uint uVar18;
undefined1 auStack_878 [32];
int *local_858;
uint auStack_84c [513];
ulonglong local_48;
local_48 = DAT_1401ac5a0 ^ (ulonglong)auStack_878;
uVar3 = *param_1 * 2;
local_858 = param_2;
if (((int)uVar3 <= param_2[1]) ||
(uVar5 = FUN_140109880((longlong)param_2,uVar3), (int)uVar5 == 0)) {
uVar12 = 0;
lVar14 = (longlong)(int)uVar3;
if (0 < lVar14) {
lVar2 = *(longlong *)(param_1 + 4);
iVar1 = *param_1;
uVar11 = uVar12;
uVar15 = uVar12;
uVar17 = uVar12;
do {
iVar6 = iVar1 + -1;
iVar13 = (int)uVar11;
iVar9 = iVar13;
if (iVar6 < iVar13) {
iVar9 = iVar6;
}
iVar6 = iVar13 - iVar9;
puVar8 = (uint *)(lVar2 + (longlong)iVar6 * 4);
puVar7 = (uint *)(lVar2 + (longlong)iVar9 * 4);
uVar4 = iVar1 - iVar6;
uVar18 = iVar9 + 1U;
if ((int)uVar4 < (int)(iVar9 + 1U)) {
uVar18 = uVar4;
}
uVar4 = (iVar9 - iVar6) + 1 >> 1;
if ((int)uVar4 <= (int)uVar18) {
uVar18 = uVar4;
}
uVar16 = uVar12;
if (0 < (int)uVar18) {
uVar10 = (ulonglong)uVar18;
do {
uVar18 = *puVar7;
uVar4 = *puVar8;
puVar7 = puVar7 + -1;
puVar8 = puVar8 + 1;
uVar16 = uVar16 + (ulonglong)uVar18 * (ulonglong)uVar4;
uVar10 = uVar10 - 1;
} while (uVar10 != 0);
}
uVar16 = uVar17 + uVar16 * 2;
if ((uVar11 & 1) == 0) {
uVar11 = (ulonglong)*(uint *)(lVar2 + ((longlong)iVar13 >> 1) * 4);
uVar16 = uVar16 + uVar11 * uVar11;
}
uVar15 = uVar15 + 1;
uVar11 = (ulonglong)(iVar13 + 1);
uVar17 = uVar16 >> 0x1c;
auStack_84c[uVar15] = (uint)uVar16 & 0xfffffff;
param_2 = local_858;
} while ((longlong)uVar15 < lVar14);
}
iVar1 = *param_2;
puVar8 = *(uint **)(param_2 + 4);
*param_2 = *param_1 * 2;
puVar7 = puVar8;
uVar18 = 0;
if (0 < lVar14) {
do {
lVar2 = uVar12 + 1;
uVar12 = uVar12 + 1;
puVar8 = puVar7 + 1;
*puVar7 = auStack_84c[lVar2] & 0xfffffff;
puVar7 = puVar8;
uVar18 = uVar3;
} while ((longlong)uVar12 < lVar14);
}
if ((int)uVar18 < iVar1) {
memset(puVar8,0,(ulonglong)(iVar1 - uVar18) << 2);
}
FUN_140109920(param_2);
uVar5 = 0;
}
return uVar5;
}